// (c) 2022 and onwards The vChewing Project (LGPL v3.0 License or later).
// ====================
// This code is released under the SPDX-License-Identifier: `LGPL-3.0-or-later`.

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Tekkon {
  /// <summary>
  /// 該結構用來存放鐵恨引擎的一些公用資料。
  /// </summary>
  public struct Shared {
    // MARK: - Phonabet to Hanyu-Pinyin Conversion Processing

    /// <summary>
    /// 注音轉拼音，要求陰平必須是空格。
    /// </summary>
    /// <param name="targetJoined">傳入的 String 對象物件。</param>
    /// <returns>漢語拼音字串。</returns>
    public static string CnvPhonaToHanyuPinyin(string targetJoined) {
      return ArrPhonaToHanyuPinyin.Aggregate(
        targetJoined, (current, key) => current.Replace(key[0], key[1]));
    }

    /// <summary>
    /// 漢語拼音數字標調式轉漢語拼音教科書格式，要求陰平必須是數字 1。
    /// </summary>
    /// <param name="targetJoined">傳入的 String 對象物件。</param>
    /// <returns>符合教科書排版規範的漢語拼音字串。</returns>
    public static string CnvHanyuPinyinToTextbookStyle(string targetJoined) {
      return ArrHanyuPinyinTextbookStyleConversionTable.Aggregate(
        targetJoined, (current, key) => current.Replace(key[0], key[1]));
    }

    /// <summary>
    /// 該函式負責將注音轉為教科書印刷的方式（先寫輕聲）。
    /// </summary>
    /// <param
    /// name="target">要拿來做轉換處理的讀音。</param>
    /// <returns>經過轉換處理的讀音。</returns>
    public static string CnvPhonaToTextbookStyle(string target) {
      if (target.Length == 0) return target;
      string newString = target;
      if (newString.Last() == '˙')
        newString = "˙" + newString.Substring(0, newString.Length - 1);
      return newString;
    }

    /// <summary>
    /// 該函式用來恢復注音當中的陰平聲調，恢復之後會以「1」表示陰平。
    /// </summary>
    /// <param
    /// name="target">要拿來做轉換處理的讀音。</param>
    /// <returns>經過轉換處理的讀音。</returns>
    public static string RestoreToneOneInPhona(string target) {
      if (target.Length == 0) return target;
      string newString = target;
      if (!newString.Contains('ˊ') && !newString.Contains('ˇ') &&
          !newString.Contains('ˋ') && !newString.Contains('˙'))
        newString += "1";
      return newString;
    }

    /// <summary>
    /// 該函式用來將漢語拼音轉為注音。
    /// </summary>
    /// <param name="targetJoined">要轉換的漢語拼音內容，要求必須帶有 12345
    /// 數字標調。</param>
    /// <param
    /// name="newToneOne">對陰平指定新的標記。預設情況下該標記為空字串。</param>
    /// <returns>轉換結果。</returns>
    public static string CnvHanyuPinyinToPhona(string targetJoined,
                                               string newToneOne = "") {
        // 允許的字元：英數 (A-Za-z0-9)、空白、Tab、連字號(-)。
        // 如果含底線或包含任何不在允許列表中的字元，則放棄轉換。
        if (targetJoined.Contains('_') ||
          Regex.IsMatch(targetJoined, @".*[^A-Za-z0-9 \t-].*"))
        return targetJoined;
      foreach (string key in MapHanyuPinyin.Keys.OrderBy(x => x.Length)
                                           .Reverse()) {
        if (targetJoined.Contains(key))
          targetJoined = targetJoined.Replace(key, MapHanyuPinyin[key]);
      }

      foreach (Rune key in MapArayuruPinyinIntonation.Keys) {
        string keyStr = key.ToString();
        if (!targetJoined.Contains(keyStr)) continue;
        string replacement = key.Equals(new Rune('1'))
          ? newToneOne
          : MapArayuruPinyinIntonation[key].ToString();
        targetJoined = targetJoined.Replace(keyStr, replacement);
      }

      return targetJoined;
    }

    /// <summary>
    /// 原始轉換對照表資料貯存專用佇列（數字標調格式）。<br />
    /// 排序很重要。先處理最長的，再處理短的。不然會出亂子。
    /// </summary>
    public static readonly string[][] ArrPhonaToHanyuPinyin = {
                                                                new[] { " ", "1" }, new[] { "ˊ", "2" },
                                                                new[] { "ˇ", "3" }, new[] { "ˋ", "4" },
                                                                new[] { "˙", "5" }, new[] { "ㄅㄧㄝ", "bie" },
                                                                new[] { "ㄅㄧㄠ", "biao" }, new[] { "ㄅㄧㄢ", "bian" },
                                                                new[] { "ㄅㄧㄣ", "bin" }, new[] { "ㄅㄧㄥ", "bing" },
                                                                new[] { "ㄆㄧㄚ", "pia" }, new[] { "ㄆㄧㄝ", "pie" },
                                                                new[] { "ㄆㄧㄠ", "piao" }, new[] { "ㄆㄧㄢ", "pian" },
                                                                new[] { "ㄆㄧㄣ", "pin" }, new[] { "ㄆㄧㄥ", "ping" },
                                                                new[] { "ㄇㄧㄝ", "mie" }, new[] { "ㄇㄧㄠ", "miao" },
                                                                new[] { "ㄇㄧㄡ", "miu" }, new[] { "ㄇㄧㄢ", "mian" },
                                                                new[] { "ㄇㄧㄣ", "min" }, new[] { "ㄇㄧㄥ", "ming" },
                                                                new[] { "ㄈㄧㄠ", "fiao" }, new[] { "ㄈㄨㄥ", "fong" },
                                                                new[] { "ㄉㄧㄚ", "dia" }, new[] { "ㄉㄧㄝ", "die" },
                                                                new[] { "ㄉㄧㄠ", "diao" }, new[] { "ㄉㄧㄡ", "diu" },
                                                                new[] { "ㄉㄧㄢ", "dian" }, new[] { "ㄉㄧㄥ", "ding" },
                                                                new[] { "ㄉㄨㄛ", "duo" }, new[] { "ㄉㄨㄟ", "dui" },
                                                                new[] { "ㄉㄨㄢ", "duan" }, new[] { "ㄉㄨㄣ", "dun" },
                                                                new[] { "ㄉㄨㄥ", "dong" }, new[] { "ㄊㄧㄝ", "tie" },
                                                                new[] { "ㄊㄧㄠ", "tiao" }, new[] { "ㄊㄧㄢ", "tian" },
                                                                new[] { "ㄊㄧㄥ", "ting" }, new[] { "ㄊㄨㄛ", "tuo" },
                                                                new[] { "ㄊㄨㄟ", "tui" }, new[] { "ㄊㄨㄢ", "tuan" },
                                                                new[] { "ㄊㄨㄣ", "tun" }, new[] { "ㄊㄨㄥ", "tong" },
                                                                new[] { "ㄋㄧㄝ", "nie" }, new[] { "ㄋㄧㄠ", "niao" },
                                                                new[] { "ㄋㄧㄡ", "niu" }, new[] { "ㄋㄧㄢ", "nian" },
                                                                new[] { "ㄋㄧㄣ", "nin" }, new[] { "ㄋㄧㄤ", "niang" },
                                                                new[] { "ㄋㄧㄥ", "ning" }, new[] { "ㄋㄨㄛ", "nuo" },
                                                                new[] { "ㄋㄨㄟ", "nui" }, new[] { "ㄋㄨㄢ", "nuan" },
                                                                new[] { "ㄋㄨㄣ", "nun" }, new[] { "ㄋㄨㄥ", "nong" },
                                                                new[] { "ㄋㄩㄝ", "nve" }, new[] { "ㄌㄧㄚ", "lia" },
                                                                new[] { "ㄌㄧㄝ", "lie" }, new[] { "ㄌㄧㄠ", "liao" },
                                                                new[] { "ㄌㄧㄡ", "liu" }, new[] { "ㄌㄧㄢ", "lian" },
                                                                new[] { "ㄌㄧㄣ", "lin" }, new[] { "ㄌㄧㄤ", "liang" },
                                                                new[] { "ㄌㄧㄥ", "ling" }, new[] { "ㄌㄨㄛ", "luo" },
                                                                new[] { "ㄌㄨㄢ", "luan" }, new[] { "ㄌㄨㄣ", "lun" },
                                                                new[] { "ㄌㄨㄥ", "long" }, new[] { "ㄌㄩㄝ", "lve" },
                                                                new[] { "ㄌㄩㄢ", "lvan" }, new[] { "ㄍㄧㄠ", "giao" },
                                                                new[] { "ㄍㄧㄣ", "gin" }, new[] { "ㄍㄨㄚ", "gua" },
                                                                new[] { "ㄍㄨㄛ", "guo" }, new[] { "ㄍㄨㄜ", "gue" },
                                                                new[] { "ㄍㄨㄞ", "guai" }, new[] { "ㄍㄨㄟ", "gui" },
                                                                new[] { "ㄍㄨㄢ", "guan" }, new[] { "ㄍㄨㄣ", "gun" },
                                                                new[] { "ㄍㄨㄤ", "guang" }, new[] { "ㄍㄨㄥ", "gong" },
                                                                new[] { "ㄎㄧㄡ", "kiu" }, new[] { "ㄎㄧㄤ", "kiang" },
                                                                new[] { "ㄎㄨㄚ", "kua" }, new[] { "ㄎㄨㄛ", "kuo" },
                                                                new[] { "ㄎㄨㄞ", "kuai" }, new[] { "ㄎㄨㄟ", "kui" },
                                                                new[] { "ㄎㄨㄢ", "kuan" }, new[] { "ㄎㄨㄣ", "kun" },
                                                                new[] { "ㄎㄨㄤ", "kuang" }, new[] { "ㄎㄨㄥ", "kong" },
                                                                new[] { "ㄏㄨㄚ", "hua" }, new[] { "ㄏㄨㄛ", "huo" },
                                                                new[] { "ㄏㄨㄞ", "huai" }, new[] { "ㄏㄨㄟ", "hui" },
                                                                new[] { "ㄏㄨㄢ", "huan" }, new[] { "ㄏㄨㄣ", "hun" },
                                                                new[] { "ㄏㄨㄤ", "huang" }, new[] { "ㄏㄨㄥ", "hong" },
                                                                new[] { "ㄐㄧㄚ", "jia" }, new[] { "ㄐㄧㄝ", "jie" },
                                                                new[] { "ㄐㄧㄠ", "jiao" }, new[] { "ㄐㄧㄡ", "jiu" },
                                                                new[] { "ㄐㄧㄢ", "jian" }, new[] { "ㄐㄧㄣ", "jin" },
                                                                new[] { "ㄐㄧㄤ", "jiang" }, new[] { "ㄐㄧㄥ", "jing" },
                                                                new[] { "ㄐㄩㄝ", "jue" }, new[] { "ㄐㄩㄢ", "juan" },
                                                                new[] { "ㄐㄩㄣ", "jun" }, new[] { "ㄐㄩㄥ", "jiong" },
                                                                new[] { "ㄑㄧㄚ", "qia" }, new[] { "ㄑㄧㄝ", "qie" },
                                                                new[] { "ㄑㄧㄠ", "qiao" }, new[] { "ㄑㄧㄡ", "qiu" },
                                                                new[] { "ㄑㄧㄢ", "qian" }, new[] { "ㄑㄧㄣ", "qin" },
                                                                new[] { "ㄑㄧㄤ", "qiang" }, new[] { "ㄑㄧㄥ", "qing" },
                                                                new[] { "ㄑㄩㄝ", "que" }, new[] { "ㄑㄩㄢ", "quan" },
                                                                new[] { "ㄑㄩㄣ", "qun" }, new[] { "ㄑㄩㄥ", "qiong" },
                                                                new[] { "ㄒㄧㄚ", "xia" }, new[] { "ㄒㄧㄝ", "xie" },
                                                                new[] { "ㄒㄧㄠ", "xiao" }, new[] { "ㄒㄧㄡ", "xiu" },
                                                                new[] { "ㄒㄧㄢ", "xian" }, new[] { "ㄒㄧㄣ", "xin" },
                                                                new[] { "ㄒㄧㄤ", "xiang" }, new[] { "ㄒㄧㄥ", "xing" },
                                                                new[] { "ㄒㄩㄝ", "xue" }, new[] { "ㄒㄩㄢ", "xuan" },
                                                                new[] { "ㄒㄩㄣ", "xun" }, new[] { "ㄒㄩㄥ", "xiong" },
                                                                new[] { "ㄓㄨㄚ", "zhua" }, new[] { "ㄓㄨㄛ", "zhuo" },
                                                                new[] { "ㄓㄨㄞ", "zhuai" }, new[] { "ㄓㄨㄟ", "zhui" },
                                                                new[] { "ㄓㄨㄢ", "zhuan" }, new[] { "ㄓㄨㄣ", "zhun" },
                                                                new[] { "ㄓㄨㄤ", "zhuang" }, new[] { "ㄓㄨㄥ", "zhong" },
                                                                new[] { "ㄔㄨㄚ", "chua" }, new[] { "ㄔㄨㄛ", "chuo" },
                                                                new[] { "ㄔㄨㄞ", "chuai" }, new[] { "ㄔㄨㄟ", "chui" },
                                                                new[] { "ㄔㄨㄢ", "chuan" }, new[] { "ㄔㄨㄣ", "chun" },
                                                                new[] { "ㄔㄨㄤ", "chuang" }, new[] { "ㄔㄨㄥ", "chong" },
                                                                new[] { "ㄕㄨㄚ", "shua" }, new[] { "ㄕㄨㄛ", "shuo" },
                                                                new[] { "ㄕㄨㄞ", "shuai" }, new[] { "ㄕㄨㄟ", "shui" },
                                                                new[] { "ㄕㄨㄢ", "shuan" }, new[] { "ㄕㄨㄣ", "shun" },
                                                                new[] { "ㄕㄨㄤ", "shuang" }, new[] { "ㄖㄨㄛ", "ruo" },
                                                                new[] { "ㄖㄨㄟ", "rui" }, new[] { "ㄖㄨㄢ", "ruan" },
                                                                new[] { "ㄖㄨㄣ", "run" }, new[] { "ㄖㄨㄥ", "rong" },
                                                                new[] { "ㄗㄨㄛ", "zuo" }, new[] { "ㄗㄨㄟ", "zui" },
                                                                new[] { "ㄗㄨㄢ", "zuan" }, new[] { "ㄗㄨㄣ", "zun" },
                                                                new[] { "ㄗㄨㄥ", "zong" }, new[] { "ㄘㄨㄛ", "cuo" },
                                                                new[] { "ㄘㄨㄟ", "cui" }, new[] { "ㄘㄨㄢ", "cuan" },
                                                                new[] { "ㄘㄨㄣ", "cun" }, new[] { "ㄘㄨㄥ", "cong" },
                                                                new[] { "ㄙㄨㄛ", "suo" }, new[] { "ㄙㄨㄟ", "sui" },
                                                                new[] { "ㄙㄨㄢ", "suan" }, new[] { "ㄙㄨㄣ", "sun" },
                                                                new[] { "ㄙㄨㄥ", "song" }, new[] { "ㄅㄧㄤ", "biang" },
                                                                new[] { "ㄉㄨㄤ", "duang" }, new[] { "ㄅㄚ", "ba" },
                                                                new[] { "ㄅㄛ", "bo" }, new[] { "ㄅㄞ", "bai" },
                                                                new[] { "ㄅㄟ", "bei" }, new[] { "ㄅㄠ", "bao" },
                                                                new[] { "ㄅㄢ", "ban" }, new[] { "ㄅㄣ", "ben" },
                                                                new[] { "ㄅㄤ", "bang" }, new[] { "ㄅㄥ", "beng" },
                                                                new[] { "ㄅㄧ", "bi" }, new[] { "ㄅㄨ", "bu" },
                                                                new[] { "ㄆㄚ", "pa" }, new[] { "ㄆㄛ", "po" },
                                                                new[] { "ㄆㄞ", "pai" }, new[] { "ㄆㄟ", "pei" },
                                                                new[] { "ㄆㄠ", "pao" }, new[] { "ㄆㄡ", "pou" },
                                                                new[] { "ㄆㄢ", "pan" }, new[] { "ㄆㄣ", "pen" },
                                                                new[] { "ㄆㄤ", "pang" }, new[] { "ㄆㄥ", "peng" },
                                                                new[] { "ㄆㄧ", "pi" }, new[] { "ㄆㄨ", "pu" },
                                                                new[] { "ㄇㄚ", "ma" }, new[] { "ㄇㄛ", "mo" },
                                                                new[] { "ㄇㄜ", "me" }, new[] { "ㄇㄞ", "mai" },
                                                                new[] { "ㄇㄟ", "mei" }, new[] { "ㄇㄠ", "mao" },
                                                                new[] { "ㄇㄡ", "mou" }, new[] { "ㄇㄢ", "man" },
                                                                new[] { "ㄇㄣ", "men" }, new[] { "ㄇㄤ", "mang" },
                                                                new[] { "ㄇㄥ", "meng" }, new[] { "ㄇㄧ", "mi" },
                                                                new[] { "ㄇㄨ", "mu" }, new[] { "ㄈㄚ", "fa" },
                                                                new[] { "ㄈㄛ", "fo" }, new[] { "ㄈㄟ", "fei" },
                                                                new[] { "ㄈㄡ", "fou" }, new[] { "ㄈㄢ", "fan" },
                                                                new[] { "ㄈㄣ", "fen" }, new[] { "ㄈㄤ", "fang" },
                                                                new[] { "ㄈㄥ", "feng" }, new[] { "ㄈㄨ", "fu" },
                                                                new[] { "ㄉㄚ", "da" }, new[] { "ㄉㄜ", "de" },
                                                                new[] { "ㄉㄞ", "dai" }, new[] { "ㄉㄟ", "dei" },
                                                                new[] { "ㄉㄠ", "dao" }, new[] { "ㄉㄡ", "dou" },
                                                                new[] { "ㄉㄢ", "dan" }, new[] { "ㄉㄣ", "den" },
                                                                new[] { "ㄉㄤ", "dang" }, new[] { "ㄉㄥ", "deng" },
                                                                new[] { "ㄉㄧ", "di" }, new[] { "ㄉㄨ", "du" },
                                                                new[] { "ㄊㄚ", "ta" }, new[] { "ㄊㄜ", "te" },
                                                                new[] { "ㄊㄞ", "tai" }, new[] { "ㄊㄠ", "tao" },
                                                                new[] { "ㄊㄡ", "tou" }, new[] { "ㄊㄢ", "tan" },
                                                                new[] { "ㄊㄤ", "tang" }, new[] { "ㄊㄥ", "teng" },
                                                                new[] { "ㄊㄧ", "ti" }, new[] { "ㄊㄨ", "tu" },
                                                                new[] { "ㄋㄚ", "na" }, new[] { "ㄋㄜ", "ne" },
                                                                new[] { "ㄋㄞ", "nai" }, new[] { "ㄋㄟ", "nei" },
                                                                new[] { "ㄋㄠ", "nao" }, new[] { "ㄋㄡ", "nou" },
                                                                new[] { "ㄋㄢ", "nan" }, new[] { "ㄋㄣ", "nen" },
                                                                new[] { "ㄋㄤ", "nang" }, new[] { "ㄋㄥ", "neng" },
                                                                new[] { "ㄋㄧ", "ni" }, new[] { "ㄋㄨ", "nu" },
                                                                new[] { "ㄋㄩ", "nv" }, new[] { "ㄌㄚ", "la" },
                                                                new[] { "ㄌㄛ", "lo" }, new[] { "ㄌㄜ", "le" },
                                                                new[] { "ㄌㄞ", "lai" }, new[] { "ㄌㄟ", "lei" },
                                                                new[] { "ㄌㄠ", "lao" }, new[] { "ㄌㄡ", "lou" },
                                                                new[] { "ㄌㄢ", "lan" }, new[] { "ㄌㄤ", "lang" },
                                                                new[] { "ㄌㄥ", "leng" }, new[] { "ㄌㄧ", "li" },
                                                                new[] { "ㄌㄨ", "lu" }, new[] { "ㄌㄩ", "lv" },
                                                                new[] { "ㄍㄚ", "ga" }, new[] { "ㄍㄜ", "ge" },
                                                                new[] { "ㄍㄞ", "gai" }, new[] { "ㄍㄟ", "gei" },
                                                                new[] { "ㄍㄠ", "gao" }, new[] { "ㄍㄡ", "gou" },
                                                                new[] { "ㄍㄢ", "gan" }, new[] { "ㄍㄣ", "gen" },
                                                                new[] { "ㄍㄤ", "gang" }, new[] { "ㄍㄥ", "geng" },
                                                                new[] { "ㄍㄧ", "gi" }, new[] { "ㄍㄨ", "gu" },
                                                                new[] { "ㄎㄚ", "ka" }, new[] { "ㄎㄜ", "ke" },
                                                                new[] { "ㄎㄞ", "kai" }, new[] { "ㄎㄠ", "kao" },
                                                                new[] { "ㄎㄡ", "kou" }, new[] { "ㄎㄢ", "kan" },
                                                                new[] { "ㄎㄣ", "ken" }, new[] { "ㄎㄤ", "kang" },
                                                                new[] { "ㄎㄥ", "keng" }, new[] { "ㄎㄨ", "ku" },
                                                                new[] { "ㄏㄚ", "ha" }, new[] { "ㄏㄜ", "he" },
                                                                new[] { "ㄏㄞ", "hai" }, new[] { "ㄏㄟ", "hei" },
                                                                new[] { "ㄏㄠ", "hao" }, new[] { "ㄏㄡ", "hou" },
                                                                new[] { "ㄏㄢ", "han" }, new[] { "ㄏㄣ", "hen" },
                                                                new[] { "ㄏㄤ", "hang" }, new[] { "ㄏㄥ", "heng" },
                                                                new[] { "ㄏㄨ", "hu" }, new[] { "ㄐㄧ", "ji" },
                                                                new[] { "ㄐㄩ", "ju" }, new[] { "ㄑㄧ", "qi" },
                                                                new[] { "ㄑㄩ", "qu" }, new[] { "ㄒㄧ", "xi" },
                                                                new[] { "ㄒㄩ", "xu" }, new[] { "ㄓㄚ", "zha" },
                                                                new[] { "ㄓㄜ", "zhe" }, new[] { "ㄓㄞ", "zhai" },
                                                                new[] { "ㄓㄟ", "zhei" }, new[] { "ㄓㄠ", "zhao" },
                                                                new[] { "ㄓㄡ", "zhou" }, new[] { "ㄓㄢ", "zhan" },
                                                                new[] { "ㄓㄣ", "zhen" }, new[] { "ㄓㄤ", "zhang" },
                                                                new[] { "ㄓㄥ", "zheng" }, new[] { "ㄓㄨ", "zhu" },
                                                                new[] { "ㄔㄚ", "cha" }, new[] { "ㄔㄜ", "che" },
                                                                new[] { "ㄔㄞ", "chai" }, new[] { "ㄔㄠ", "chao" },
                                                                new[] { "ㄔㄡ", "chou" }, new[] { "ㄔㄢ", "chan" },
                                                                new[] { "ㄔㄣ", "chen" }, new[] { "ㄔㄤ", "chang" },
                                                                new[] { "ㄔㄥ", "cheng" }, new[] { "ㄔㄨ", "chu" },
                                                                new[] { "ㄕㄚ", "sha" }, new[] { "ㄕㄜ", "she" },
                                                                new[] { "ㄕㄞ", "shai" }, new[] { "ㄕㄟ", "shei" },
                                                                new[] { "ㄕㄠ", "shao" }, new[] { "ㄕㄡ", "shou" },
                                                                new[] { "ㄕㄢ", "shan" }, new[] { "ㄕㄣ", "shen" },
                                                                new[] { "ㄕㄤ", "shang" }, new[] { "ㄕㄥ", "sheng" },
                                                                new[] { "ㄕㄨ", "shu" }, new[] { "ㄖㄜ", "re" },
                                                                new[] { "ㄖㄠ", "rao" }, new[] { "ㄖㄡ", "rou" },
                                                                new[] { "ㄖㄢ", "ran" }, new[] { "ㄖㄣ", "ren" },
                                                                new[] { "ㄖㄤ", "rang" }, new[] { "ㄖㄥ", "reng" },
                                                                new[] { "ㄖㄨ", "ru" }, new[] { "ㄗㄚ", "za" },
                                                                new[] { "ㄗㄜ", "ze" }, new[] { "ㄗㄞ", "zai" },
                                                                new[] { "ㄗㄟ", "zei" }, new[] { "ㄗㄠ", "zao" },
                                                                new[] { "ㄗㄡ", "zou" }, new[] { "ㄗㄢ", "zan" },
                                                                new[] { "ㄗㄣ", "zen" }, new[] { "ㄗㄤ", "zang" },
                                                                new[] { "ㄗㄥ", "zeng" }, new[] { "ㄗㄨ", "zu" },
                                                                new[] { "ㄘㄚ", "ca" }, new[] { "ㄘㄜ", "ce" },
                                                                new[] { "ㄘㄞ", "cai" }, new[] { "ㄘㄟ", "cei" },
                                                                new[] { "ㄘㄠ", "cao" }, new[] { "ㄘㄡ", "cou" },
                                                                new[] { "ㄘㄢ", "can" }, new[] { "ㄘㄣ", "cen" },
                                                                new[] { "ㄘㄤ", "cang" }, new[] { "ㄘㄥ", "ceng" },
                                                                new[] { "ㄘㄨ", "cu" }, new[] { "ㄙㄚ", "sa" },
                                                                new[] { "ㄙㄜ", "se" }, new[] { "ㄙㄞ", "sai" },
                                                                new[] { "ㄙㄟ", "sei" }, new[] { "ㄙㄠ", "sao" },
                                                                new[] { "ㄙㄡ", "sou" }, new[] { "ㄙㄢ", "san" },
                                                                new[] { "ㄙㄣ", "sen" }, new[] { "ㄙㄤ", "sang" },
                                                                new[] { "ㄙㄥ", "seng" }, new[] { "ㄙㄨ", "su" },
                                                                new[] { "ㄧㄚ", "ya" }, new[] { "ㄧㄛ", "yo" },
                                                                new[] { "ㄧㄝ", "ye" }, new[] { "ㄧㄞ", "yai" },
                                                                new[] { "ㄧㄠ", "yao" }, new[] { "ㄧㄡ", "you" },
                                                                new[] { "ㄧㄢ", "yan" }, new[] { "ㄧㄣ", "yin" },
                                                                new[] { "ㄧㄤ", "yang" }, new[] { "ㄧㄥ", "ying" },
                                                                new[] { "ㄨㄚ", "wa" }, new[] { "ㄨㄛ", "wo" },
                                                                new[] { "ㄨㄞ", "wai" }, new[] { "ㄨㄟ", "wei" },
                                                                new[] { "ㄨㄢ", "wan" }, new[] { "ㄨㄣ", "wen" },
                                                                new[] { "ㄨㄤ", "wang" }, new[] { "ㄨㄥ", "weng" },
                                                                new[] { "ㄩㄝ", "yue" }, new[] { "ㄩㄢ", "yuan" },
                                                                new[] { "ㄩㄣ", "yun" }, new[] { "ㄩㄥ", "yong" },
                                                                new[] { "ㄅ", "b" }, new[] { "ㄆ", "p" },
                                                                new[] { "ㄇ", "m" }, new[] { "ㄈ", "f" },
                                                                new[] { "ㄉ", "d" }, new[] { "ㄊ", "t" },
                                                                new[] { "ㄋ", "n" }, new[] { "ㄌ", "l" },
                                                                new[] { "ㄍ", "g" }, new[] { "ㄎ", "k" },
                                                                new[] { "ㄏ", "h" }, new[] { "ㄐ", "j" },
                                                                new[] { "ㄑ", "q" }, new[] { "ㄒ", "x" },
                                                                new[] { "ㄓ", "zhi" }, new[] { "ㄔ", "chi" },
                                                                new[] { "ㄕ", "shi" }, new[] { "ㄖ", "ri" },
                                                                new[] { "ㄗ", "zi" }, new[] { "ㄘ", "ci" },
                                                                new[] { "ㄙ", "si" }, new[] { "ㄚ", "a" },
                                                                new[] { "ㄛ", "o" }, new[] { "ㄜ", "e" },
                                                                new[] { "ㄝ", "eh" }, new[] { "ㄞ", "ai" },
                                                                new[] { "ㄟ", "ei" }, new[] { "ㄠ", "ao" },
                                                                new[] { "ㄡ", "ou" }, new[] { "ㄢ", "an" },
                                                                new[] { "ㄣ", "en" }, new[] { "ㄤ", "ang" },
                                                                new[] { "ㄥ", "eng" }, new[] { "ㄦ", "er" },
                                                                new[] { "ㄧ", "yi" }, new[] { "ㄨ", "wu" },
                                                                new[] { "ㄩ", "yu" }
                                                              };

    /// <summary>
    /// 漢語拼音韻母轉換對照表資料貯存專用佇列。<br />
    /// 排序很重要。先處理最長的，再處理短的。不然會出亂子。
    /// </summary>
    public static readonly string[][] ArrHanyuPinyinTextbookStyleConversionTable = {
      new[] { "iang1", "iāng" }, new[] { "iang2", "iáng" },
      new[] { "iang3", "iǎng" }, new[] { "iang4", "iàng" },
      new[] { "iong1", "iōng" }, new[] { "iong2", "ióng" },
      new[] { "iong3", "iǒng" }, new[] { "iong4", "iòng" },
      new[] { "uang1", "uāng" }, new[] { "uang2", "uáng" },
      new[] { "uang3", "uǎng" }, new[] { "uang4", "uàng" },
      new[] { "uang5", "uang" }, new[] { "ang1", "āng" },
      new[] { "ang2", "áng" }, new[] { "ang3", "ǎng" },
      new[] { "ang4", "àng" }, new[] { "ang5", "ang" },
      new[] { "eng1", "ēng" }, new[] { "eng2", "éng" },
      new[] { "eng3", "ěng" }, new[] { "eng4", "èng" },
      new[] { "ian1", "iān" }, new[] { "ian2", "ián" },
      new[] { "ian3", "iǎn" }, new[] { "ian4", "iàn" },
      new[] { "iao1", "iāo" }, new[] { "iao2", "iáo" },
      new[] { "iao3", "iǎo" }, new[] { "iao4", "iào" },
      new[] { "ing1", "īng" }, new[] { "ing2", "íng" },
      new[] { "ing3", "ǐng" }, new[] { "ing4", "ìng" },
      new[] { "ong1", "ōng" }, new[] { "ong2", "óng" },
      new[] { "ong3", "ǒng" }, new[] { "ong4", "òng" },
      new[] { "uai1", "uāi" }, new[] { "uai2", "uái" },
      new[] { "uai3", "uǎi" }, new[] { "uai4", "uài" },
      new[] { "uan1", "uān" }, new[] { "uan2", "uán" },
      new[] { "uan3", "uǎn" }, new[] { "uan4", "uàn" },
      new[] { "van2", "üán" }, new[] { "van3", "üǎn" },
      new[] { "ai1", "āi" }, new[] { "ai2", "ái" },
      new[] { "ai3", "ǎi" }, new[] { "ai4", "ài" },
      new[] { "ai5", "ai" }, new[] { "an1", "ān" },
      new[] { "an2", "án" }, new[] { "an3", "ǎn" },
      new[] { "an4", "àn" }, new[] { "ao1", "āo" },
      new[] { "ao2", "áo" }, new[] { "ao3", "ǎo" },
      new[] { "ao4", "ào" }, new[] { "ao5", "ao" },
      new[] { "eh2", "ế" }, new[] { "eh3", "êˇ" },
      new[] { "eh4", "ề" }, new[] { "eh5", "ê" },
      new[] { "ei1", "ēi" }, new[] { "ei2", "éi" },
      new[] { "ei3", "ěi" }, new[] { "ei4", "èi" },
      new[] { "ei5", "ei" }, new[] { "en1", "ēn" },
      new[] { "en2", "én" }, new[] { "en3", "ěn" },
      new[] { "en4", "èn" }, new[] { "en5", "en" },
      new[] { "er1", "ēr" }, new[] { "er2", "ér" },
      new[] { "er3", "ěr" }, new[] { "er4", "èr" },
      new[] { "er5", "er" }, new[] { "ia1", "iā" },
      new[] { "ia2", "iá" }, new[] { "ia3", "iǎ" },
      new[] { "ia4", "ià" }, new[] { "ie1", "iē" },
      new[] { "ie2", "ié" }, new[] { "ie3", "iě" },
      new[] { "ie4", "iè" }, new[] { "ie5", "ie" },
      new[] { "in1", "īn" }, new[] { "in2", "ín" },
      new[] { "in3", "ǐn" }, new[] { "in4", "ìn" },
      new[] { "iu1", "iū" }, new[] { "iu2", "iú" },
      new[] { "iu3", "iǔ" }, new[] { "iu4", "iù" },
      new[] { "ou1", "ōu" }, new[] { "ou2", "óu" },
      new[] { "ou3", "ǒu" }, new[] { "ou4", "òu" },
      new[] { "ou5", "ou" }, new[] { "ua1", "uā" },
      new[] { "ua2", "uá" }, new[] { "ua3", "uǎ" },
      new[] { "ua4", "uà" }, new[] { "ue1", "uē" },
      new[] { "ue2", "ué" }, new[] { "ue3", "uě" },
      new[] { "ue4", "uè" }, new[] { "ui1", "uī" },
      new[] { "ui2", "uí" }, new[] { "ui3", "uǐ" },
      new[] { "ui4", "uì" }, new[] { "un1", "ūn" },
      new[] { "un2", "ún" }, new[] { "un3", "ǔn" },
      new[] { "un4", "ùn" }, new[] { "uo1", "uō" },
      new[] { "uo2", "uó" }, new[] { "uo3", "uǒ" },
      new[] { "uo4", "uò" }, new[] { "uo5", "uo" },
      new[] { "ve1", "üē" }, new[] { "ve3", "üě" },
      new[] { "ve4", "üè" }, new[] { "a1", "ā" },
      new[] { "a2", "á" }, new[] { "a3", "ǎ" },
      new[] { "a4", "à" }, new[] { "a5", "a" },
      new[] { "e1", "ē" }, new[] { "e2", "é" },
      new[] { "e3", "ě" }, new[] { "e4", "è" },
      new[] { "e5", "e" }, new[] { "i1", "ī" },
      new[] { "i2", "í" }, new[] { "i3", "ǐ" },
      new[] { "i4", "ì" }, new[] { "i5", "i" },
      new[] { "o1", "ō" }, new[] { "o2", "ó" },
      new[] { "o3", "ǒ" }, new[] { "o4", "ò" },
      new[] { "o5", "o" }, new[] { "u1", "ū" },
      new[] { "u2", "ú" }, new[] { "u3", "ǔ" },
      new[] { "u4", "ù" }, new[] { "v1", "ǖ" },
      new[] { "v2", "ǘ" }, new[] { "v3", "ǚ" },
      new[] { "v4", "ǜ" }
    };

    // MARK: - Maps for Keyboard-to-Pinyin parsers

    /// <summary>
    /// 任何形式的拼音排列都會用到的陣列（韋氏拼音與趙元任國語羅馬字除外），
    /// 用 Strings 反而省事一些。<br />
    /// 這裡同時兼容大千注音的調號數字，所以也將 6、7 號數字鍵放在允許範圍內。
    /// </summary>
    public const string MapArayuruPinyin = "abcdefghijklmnopqrstuvwxyz1234567 ";

    /// <summary>以 <see cref="Rune"/> 表示的拼音按鍵集合，方便進行 Unicode 符號比對。</summary>
    public static readonly HashSet<Rune> MapArayuruPinyinRunes = BuildRuneSet(MapArayuruPinyin);

    /// <summary>
    /// 任何形式的拼音排列都會用到的陣列（韋氏拼音與趙元任國語羅馬字除外），
    /// 用 Strings 反而省事一些。<br />
    /// 這裡同時兼容大千注音的調號數字，所以也將 6、7 號數字鍵放在允許範圍內。
    /// </summary>
    public const string MapWadeGilesPinyinKeys = MapArayuruPinyin + "'";

    /// <summary>韋氏拼音專用的按鍵集合，採用 <see cref="Rune"/> 形式。</summary>
    public static readonly HashSet<Rune> MapWadeGilesPinyinRunes = BuildRuneSet(MapWadeGilesPinyinKeys);

    /// <summary>
    /// 任何拼音都會用到的聲調鍵陣列
    /// </summary>
    public static readonly Dictionary<Rune, Rune> MapArayuruPinyinIntonation =
      new Dictionary<Rune, Rune> {
        [new Rune('1')] = new Rune(' '),
        [new Rune('2')] = new Rune('ˊ'),
        [new Rune('3')] = new Rune('ˇ'),
        [new Rune('4')] = new Rune('ˋ'),
        [new Rune('5')] = new Rune('˙'),
        [new Rune('6')] = new Rune('ˊ'),
        [new Rune('7')] = new Rune('˙'),
        [new Rune(' ')] = new Rune(' ')
      };

    /// <summary>
    /// 漢語拼音排列專用處理陣列
    /// </summary>
    public static readonly Dictionary<string, string> MapHanyuPinyin =
      new Dictionary<string, string> {
        ["chuang"] = "ㄔㄨㄤ", ["shuang"] = "ㄕㄨㄤ", ["zhuang"] = "ㄓㄨㄤ",
        ["chang"] = "ㄔㄤ", ["cheng"] = "ㄔㄥ", ["chong"] = "ㄔㄨㄥ",
        ["chuai"] = "ㄔㄨㄞ", ["chuan"] = "ㄔㄨㄢ", ["guang"] = "ㄍㄨㄤ",
        ["huang"] = "ㄏㄨㄤ", ["jiang"] = "ㄐㄧㄤ", ["jiong"] = "ㄐㄩㄥ",
        ["kiang"] = "ㄎㄧㄤ", ["kuang"] = "ㄎㄨㄤ", ["biang"] = "ㄅㄧㄤ",
        ["duang"] = "ㄉㄨㄤ", ["liang"] = "ㄌㄧㄤ", ["niang"] = "ㄋㄧㄤ",
        ["qiang"] = "ㄑㄧㄤ", ["qiong"] = "ㄑㄩㄥ", ["shang"] = "ㄕㄤ",
        ["sheng"] = "ㄕㄥ", ["shuai"] = "ㄕㄨㄞ", ["shuan"] = "ㄕㄨㄢ",
        ["xiang"] = "ㄒㄧㄤ", ["xiong"] = "ㄒㄩㄥ", ["zhang"] = "ㄓㄤ",
        ["zheng"] = "ㄓㄥ", ["zhong"] = "ㄓㄨㄥ", ["zhuai"] = "ㄓㄨㄞ",
        ["zhuan"] = "ㄓㄨㄢ", ["bang"] = "ㄅㄤ", ["beng"] = "ㄅㄥ",
        ["bian"] = "ㄅㄧㄢ", ["biao"] = "ㄅㄧㄠ", ["bing"] = "ㄅㄧㄥ",
        ["cang"] = "ㄘㄤ", ["ceng"] = "ㄘㄥ", ["chai"] = "ㄔㄞ",
        ["chan"] = "ㄔㄢ", ["chao"] = "ㄔㄠ", ["chen"] = "ㄔㄣ",
        ["chou"] = "ㄔㄡ", ["chua"] = "ㄔㄨㄚ", ["chui"] = "ㄔㄨㄟ",
        ["chun"] = "ㄔㄨㄣ", ["chuo"] = "ㄔㄨㄛ", ["cong"] = "ㄘㄨㄥ",
        ["cuan"] = "ㄘㄨㄢ", ["dang"] = "ㄉㄤ", ["deng"] = "ㄉㄥ",
        ["dian"] = "ㄉㄧㄢ", ["diao"] = "ㄉㄧㄠ", ["ding"] = "ㄉㄧㄥ",
        ["dong"] = "ㄉㄨㄥ", ["duan"] = "ㄉㄨㄢ", ["fang"] = "ㄈㄤ",
        ["feng"] = "ㄈㄥ", ["fiao"] = "ㄈㄧㄠ", ["fong"] = "ㄈㄨㄥ",
        ["gang"] = "ㄍㄤ", ["geng"] = "ㄍㄥ", ["giao"] = "ㄍㄧㄠ",
        ["gong"] = "ㄍㄨㄥ", ["guai"] = "ㄍㄨㄞ", ["guan"] = "ㄍㄨㄢ",
        ["hang"] = "ㄏㄤ", ["heng"] = "ㄏㄥ", ["hong"] = "ㄏㄨㄥ",
        ["huai"] = "ㄏㄨㄞ", ["huan"] = "ㄏㄨㄢ", ["jian"] = "ㄐㄧㄢ",
        ["jiao"] = "ㄐㄧㄠ", ["jing"] = "ㄐㄧㄥ", ["juan"] = "ㄐㄩㄢ",
        ["kang"] = "ㄎㄤ", ["keng"] = "ㄎㄥ", ["kong"] = "ㄎㄨㄥ",
        ["kuai"] = "ㄎㄨㄞ", ["kuan"] = "ㄎㄨㄢ", ["lang"] = "ㄌㄤ",
        ["leng"] = "ㄌㄥ", ["lian"] = "ㄌㄧㄢ", ["liao"] = "ㄌㄧㄠ",
        ["ling"] = "ㄌㄧㄥ", ["long"] = "ㄌㄨㄥ", ["luan"] = "ㄌㄨㄢ",
        ["lvan"] = "ㄌㄩㄢ", ["mang"] = "ㄇㄤ", ["meng"] = "ㄇㄥ",
        ["mian"] = "ㄇㄧㄢ", ["miao"] = "ㄇㄧㄠ", ["ming"] = "ㄇㄧㄥ",
        ["nang"] = "ㄋㄤ", ["neng"] = "ㄋㄥ", ["nian"] = "ㄋㄧㄢ",
        ["niao"] = "ㄋㄧㄠ", ["ning"] = "ㄋㄧㄥ", ["nong"] = "ㄋㄨㄥ",
        ["nuan"] = "ㄋㄨㄢ", ["pang"] = "ㄆㄤ", ["peng"] = "ㄆㄥ",
        ["pian"] = "ㄆㄧㄢ", ["piao"] = "ㄆㄧㄠ", ["ping"] = "ㄆㄧㄥ",
        ["qian"] = "ㄑㄧㄢ", ["qiao"] = "ㄑㄧㄠ", ["qing"] = "ㄑㄧㄥ",
        ["quan"] = "ㄑㄩㄢ", ["rang"] = "ㄖㄤ", ["reng"] = "ㄖㄥ",
        ["rong"] = "ㄖㄨㄥ", ["ruan"] = "ㄖㄨㄢ", ["sang"] = "ㄙㄤ",
        ["seng"] = "ㄙㄥ", ["shai"] = "ㄕㄞ", ["shan"] = "ㄕㄢ",
        ["shao"] = "ㄕㄠ", ["shei"] = "ㄕㄟ", ["shen"] = "ㄕㄣ",
        ["shou"] = "ㄕㄡ", ["shua"] = "ㄕㄨㄚ", ["shui"] = "ㄕㄨㄟ",
        ["shun"] = "ㄕㄨㄣ", ["shuo"] = "ㄕㄨㄛ", ["song"] = "ㄙㄨㄥ",
        ["suan"] = "ㄙㄨㄢ", ["tang"] = "ㄊㄤ", ["teng"] = "ㄊㄥ",
        ["tian"] = "ㄊㄧㄢ", ["tiao"] = "ㄊㄧㄠ", ["ting"] = "ㄊㄧㄥ",
        ["tong"] = "ㄊㄨㄥ", ["tuan"] = "ㄊㄨㄢ", ["wang"] = "ㄨㄤ",
        ["weng"] = "ㄨㄥ", ["xian"] = "ㄒㄧㄢ", ["xiao"] = "ㄒㄧㄠ",
        ["xing"] = "ㄒㄧㄥ", ["xuan"] = "ㄒㄩㄢ", ["yang"] = "ㄧㄤ",
        ["ying"] = "ㄧㄥ", ["yong"] = "ㄩㄥ", ["yuan"] = "ㄩㄢ",
        ["zang"] = "ㄗㄤ", ["zeng"] = "ㄗㄥ", ["zhai"] = "ㄓㄞ",
        ["zhan"] = "ㄓㄢ", ["zhao"] = "ㄓㄠ", ["zhei"] = "ㄓㄟ",
        ["zhen"] = "ㄓㄣ", ["zhou"] = "ㄓㄡ", ["zhua"] = "ㄓㄨㄚ",
        ["zhui"] = "ㄓㄨㄟ", ["zhun"] = "ㄓㄨㄣ", ["zhuo"] = "ㄓㄨㄛ",
        ["zong"] = "ㄗㄨㄥ", ["zuan"] = "ㄗㄨㄢ", ["jun"] = "ㄐㄩㄣ",
        ["ang"] = "ㄤ", ["bai"] = "ㄅㄞ", ["ban"] = "ㄅㄢ",
        ["bao"] = "ㄅㄠ", ["bei"] = "ㄅㄟ", ["ben"] = "ㄅㄣ",
        ["bie"] = "ㄅㄧㄝ", ["bin"] = "ㄅㄧㄣ", ["cai"] = "ㄘㄞ",
        ["can"] = "ㄘㄢ", ["cao"] = "ㄘㄠ", ["cei"] = "ㄘㄟ",
        ["cen"] = "ㄘㄣ", ["cha"] = "ㄔㄚ", ["che"] = "ㄔㄜ",
        ["chi"] = "ㄔ", ["chu"] = "ㄔㄨ", ["cou"] = "ㄘㄡ",
        ["cui"] = "ㄘㄨㄟ", ["cun"] = "ㄘㄨㄣ", ["cuo"] = "ㄘㄨㄛ",
        ["dai"] = "ㄉㄞ", ["dan"] = "ㄉㄢ", ["dao"] = "ㄉㄠ",
        ["dei"] = "ㄉㄟ", ["den"] = "ㄉㄣ", ["dia"] = "ㄉㄧㄚ",
        ["die"] = "ㄉㄧㄝ", ["diu"] = "ㄉㄧㄡ", ["dou"] = "ㄉㄡ",
        ["dui"] = "ㄉㄨㄟ", ["dun"] = "ㄉㄨㄣ", ["duo"] = "ㄉㄨㄛ",
        ["eng"] = "ㄥ", ["fan"] = "ㄈㄢ", ["fei"] = "ㄈㄟ",
        ["fen"] = "ㄈㄣ", ["fou"] = "ㄈㄡ", ["gai"] = "ㄍㄞ",
        ["gan"] = "ㄍㄢ", ["gao"] = "ㄍㄠ", ["gei"] = "ㄍㄟ",
        ["gin"] = "ㄍㄧㄣ", ["gen"] = "ㄍㄣ", ["gou"] = "ㄍㄡ",
        ["gua"] = "ㄍㄨㄚ", ["gue"] = "ㄍㄨㄜ", ["gui"] = "ㄍㄨㄟ",
        ["gun"] = "ㄍㄨㄣ", ["guo"] = "ㄍㄨㄛ", ["hai"] = "ㄏㄞ",
        ["han"] = "ㄏㄢ", ["hao"] = "ㄏㄠ", ["hei"] = "ㄏㄟ",
        ["hen"] = "ㄏㄣ", ["hou"] = "ㄏㄡ", ["hua"] = "ㄏㄨㄚ",
        ["hui"] = "ㄏㄨㄟ", ["hun"] = "ㄏㄨㄣ", ["huo"] = "ㄏㄨㄛ",
        ["jia"] = "ㄐㄧㄚ", ["jie"] = "ㄐㄧㄝ", ["jin"] = "ㄐㄧㄣ",
        ["jiu"] = "ㄐㄧㄡ", ["jue"] = "ㄐㄩㄝ", ["kai"] = "ㄎㄞ",
        ["kan"] = "ㄎㄢ", ["kao"] = "ㄎㄠ", ["ken"] = "ㄎㄣ",
        ["kiu"] = "ㄎㄧㄡ", ["kou"] = "ㄎㄡ", ["kua"] = "ㄎㄨㄚ",
        ["kui"] = "ㄎㄨㄟ", ["kun"] = "ㄎㄨㄣ", ["kuo"] = "ㄎㄨㄛ",
        ["lai"] = "ㄌㄞ", ["lan"] = "ㄌㄢ", ["lao"] = "ㄌㄠ",
        ["lei"] = "ㄌㄟ", ["lia"] = "ㄌㄧㄚ", ["lie"] = "ㄌㄧㄝ",
        ["lin"] = "ㄌㄧㄣ", ["liu"] = "ㄌㄧㄡ", ["lou"] = "ㄌㄡ",
        ["lun"] = "ㄌㄨㄣ", ["luo"] = "ㄌㄨㄛ", ["lve"] = "ㄌㄩㄝ",
        ["mai"] = "ㄇㄞ", ["man"] = "ㄇㄢ", ["mao"] = "ㄇㄠ",
        ["mei"] = "ㄇㄟ", ["men"] = "ㄇㄣ", ["mie"] = "ㄇㄧㄝ",
        ["min"] = "ㄇㄧㄣ", ["miu"] = "ㄇㄧㄡ", ["mou"] = "ㄇㄡ",
        ["nai"] = "ㄋㄞ", ["nan"] = "ㄋㄢ", ["nao"] = "ㄋㄠ",
        ["nei"] = "ㄋㄟ", ["nen"] = "ㄋㄣ", ["nie"] = "ㄋㄧㄝ",
        ["nin"] = "ㄋㄧㄣ", ["niu"] = "ㄋㄧㄡ", ["nou"] = "ㄋㄡ",
        ["nui"] = "ㄋㄨㄟ", ["nun"] = "ㄋㄨㄣ", ["nuo"] = "ㄋㄨㄛ",
        ["nve"] = "ㄋㄩㄝ", ["pai"] = "ㄆㄞ", ["pan"] = "ㄆㄢ",
        ["pao"] = "ㄆㄠ", ["pei"] = "ㄆㄟ", ["pen"] = "ㄆㄣ",
        ["pia"] = "ㄆㄧㄚ", ["pie"] = "ㄆㄧㄝ", ["pin"] = "ㄆㄧㄣ",
        ["pou"] = "ㄆㄡ", ["qia"] = "ㄑㄧㄚ", ["qie"] = "ㄑㄧㄝ",
        ["qin"] = "ㄑㄧㄣ", ["qiu"] = "ㄑㄧㄡ", ["que"] = "ㄑㄩㄝ",
        ["qun"] = "ㄑㄩㄣ", ["ran"] = "ㄖㄢ", ["rao"] = "ㄖㄠ",
        ["ren"] = "ㄖㄣ", ["rou"] = "ㄖㄡ", ["rui"] = "ㄖㄨㄟ",
        ["run"] = "ㄖㄨㄣ", ["ruo"] = "ㄖㄨㄛ", ["sai"] = "ㄙㄞ",
        ["san"] = "ㄙㄢ", ["sao"] = "ㄙㄠ", ["sei"] = "ㄙㄟ",
        ["sen"] = "ㄙㄣ", ["sha"] = "ㄕㄚ", ["she"] = "ㄕㄜ",
        ["shi"] = "ㄕ", ["shu"] = "ㄕㄨ", ["sou"] = "ㄙㄡ",
        ["sui"] = "ㄙㄨㄟ", ["sun"] = "ㄙㄨㄣ", ["suo"] = "ㄙㄨㄛ",
        ["tai"] = "ㄊㄞ", ["tan"] = "ㄊㄢ", ["tao"] = "ㄊㄠ",
        ["tie"] = "ㄊㄧㄝ", ["tou"] = "ㄊㄡ", ["tui"] = "ㄊㄨㄟ",
        ["tun"] = "ㄊㄨㄣ", ["tuo"] = "ㄊㄨㄛ", ["wai"] = "ㄨㄞ",
        ["wan"] = "ㄨㄢ", ["wei"] = "ㄨㄟ", ["wen"] = "ㄨㄣ",
        ["xia"] = "ㄒㄧㄚ", ["xie"] = "ㄒㄧㄝ", ["xin"] = "ㄒㄧㄣ",
        ["xiu"] = "ㄒㄧㄡ", ["xue"] = "ㄒㄩㄝ", ["xun"] = "ㄒㄩㄣ",
        ["yai"] = "ㄧㄞ", ["yan"] = "ㄧㄢ", ["yao"] = "ㄧㄠ",
        ["yin"] = "ㄧㄣ", ["you"] = "ㄧㄡ", ["yue"] = "ㄩㄝ",
        ["yun"] = "ㄩㄣ", ["zai"] = "ㄗㄞ", ["zan"] = "ㄗㄢ",
        ["zao"] = "ㄗㄠ", ["zei"] = "ㄗㄟ", ["zen"] = "ㄗㄣ",
        ["zha"] = "ㄓㄚ", ["zhe"] = "ㄓㄜ", ["zhi"] = "ㄓ",
        ["zhu"] = "ㄓㄨ", ["zou"] = "ㄗㄡ", ["zui"] = "ㄗㄨㄟ",
        ["zun"] = "ㄗㄨㄣ", ["zuo"] = "ㄗㄨㄛ", ["ai"] = "ㄞ",
        ["an"] = "ㄢ", ["ao"] = "ㄠ", ["ba"] = "ㄅㄚ",
        ["bi"] = "ㄅㄧ", ["bo"] = "ㄅㄛ", ["bu"] = "ㄅㄨ",
        ["ca"] = "ㄘㄚ", ["ce"] = "ㄘㄜ", ["ci"] = "ㄘ",
        ["cu"] = "ㄘㄨ", ["da"] = "ㄉㄚ", ["de"] = "ㄉㄜ",
        ["di"] = "ㄉㄧ", ["du"] = "ㄉㄨ", ["eh"] = "ㄝ",
        ["ei"] = "ㄟ", ["en"] = "ㄣ", ["er"] = "ㄦ",
        ["fa"] = "ㄈㄚ", ["fo"] = "ㄈㄛ", ["fu"] = "ㄈㄨ",
        ["ga"] = "ㄍㄚ", ["ge"] = "ㄍㄜ", ["gi"] = "ㄍㄧ",
        ["gu"] = "ㄍㄨ", ["ha"] = "ㄏㄚ", ["he"] = "ㄏㄜ",
        ["hu"] = "ㄏㄨ", ["ji"] = "ㄐㄧ", ["ju"] = "ㄐㄩ",
        ["ka"] = "ㄎㄚ", ["ke"] = "ㄎㄜ", ["ku"] = "ㄎㄨ",
        ["la"] = "ㄌㄚ", ["le"] = "ㄌㄜ", ["li"] = "ㄌㄧ",
        ["lo"] = "ㄌㄛ", ["lu"] = "ㄌㄨ", ["lv"] = "ㄌㄩ",
        ["ma"] = "ㄇㄚ", ["me"] = "ㄇㄜ", ["mi"] = "ㄇㄧ",
        ["mo"] = "ㄇㄛ", ["mu"] = "ㄇㄨ", ["na"] = "ㄋㄚ",
        ["ne"] = "ㄋㄜ", ["ni"] = "ㄋㄧ", ["nu"] = "ㄋㄨ",
        ["nv"] = "ㄋㄩ", ["ou"] = "ㄡ", ["pa"] = "ㄆㄚ",
        ["pi"] = "ㄆㄧ", ["po"] = "ㄆㄛ", ["pu"] = "ㄆㄨ",
        ["qi"] = "ㄑㄧ", ["qu"] = "ㄑㄩ", ["re"] = "ㄖㄜ",
        ["ri"] = "ㄖ", ["ru"] = "ㄖㄨ", ["sa"] = "ㄙㄚ",
        ["se"] = "ㄙㄜ", ["si"] = "ㄙ", ["su"] = "ㄙㄨ",
        ["ta"] = "ㄊㄚ", ["te"] = "ㄊㄜ", ["ti"] = "ㄊㄧ",
        ["tu"] = "ㄊㄨ", ["wa"] = "ㄨㄚ", ["wo"] = "ㄨㄛ",
        ["wu"] = "ㄨ", ["xi"] = "ㄒㄧ", ["xu"] = "ㄒㄩ",
        ["ya"] = "ㄧㄚ", ["ye"] = "ㄧㄝ", ["yi"] = "ㄧ",
        ["yo"] = "ㄧㄛ", ["yu"] = "ㄩ", ["za"] = "ㄗㄚ",
        ["ze"] = "ㄗㄜ", ["zi"] = "ㄗ", ["zu"] = "ㄗㄨ",
        ["a"] = "ㄚ", ["e"] = "ㄜ", ["o"] = "ㄛ",
        ["q"] = "ㄑ"
      };

    /// <summary>
    /// 國音二式排列專用處理陣列
    /// </summary>
    public static readonly Dictionary<string, string> MapSecondaryPinyin =
      new Dictionary<string, string> {
        ["chuang"] = "ㄔㄨㄤ", ["shuang"] = "ㄕㄨㄤ", ["chiang"] = "ㄑㄧㄤ",
        ["chiung"] = "ㄑㄩㄥ", ["chiuan"] = "ㄑㄩㄢ", ["shiang"] = "ㄒㄧㄤ",
        ["shiung"] = "ㄒㄩㄥ", ["shiuan"] = "ㄒㄩㄢ", ["biang"] = "ㄅㄧㄤ",
        ["duang"] = "ㄉㄨㄤ", ["juang"] = "ㄓㄨㄤ", ["jiang"] = "ㄐㄧㄤ",
        ["jiung"] = "ㄐㄩㄥ", ["niang"] = "ㄋㄧㄤ", ["liang"] = "ㄌㄧㄤ",
        ["guang"] = "ㄍㄨㄤ", ["kuang"] = "ㄎㄨㄤ", ["huang"] = "ㄏㄨㄤ",
        ["chang"] = "ㄔㄤ", ["cheng"] = "ㄔㄥ", ["chuai"] = "ㄔㄨㄞ",
        ["chuan"] = "ㄔㄨㄢ", ["chung"] = "ㄔㄨㄥ", ["shang"] = "ㄕㄤ",
        ["sheng"] = "ㄕㄥ", ["shuai"] = "ㄕㄨㄞ", ["shuan"] = "ㄕㄨㄢ",
        ["jiuan"] = "ㄐㄩㄢ", ["chiau"] = "ㄑㄧㄠ", ["chian"] = "ㄑㄧㄢ",
        ["ching"] = "ㄑㄧㄥ", ["shing"] = "ㄒㄧㄥ", ["tzang"] = "ㄗㄤ",
        ["tzeng"] = "ㄗㄥ", ["tzuan"] = "ㄗㄨㄢ", ["tzung"] = "ㄗㄨㄥ",
        ["tsang"] = "ㄘㄤ", ["tseng"] = "ㄘㄥ", ["tsuan"] = "ㄘㄨㄢ",
        ["tsung"] = "ㄘㄨㄥ", ["chiue"] = "ㄑㄩㄝ", ["liuan"] = "ㄌㄩㄢ",
        ["chuei"] = "ㄔㄨㄟ", ["chuen"] = "ㄔㄨㄣ", ["shuei"] = "ㄕㄨㄟ",
        ["shuen"] = "ㄕㄨㄣ", ["chiou"] = "ㄑㄧㄡ", ["chiun"] = "ㄑㄩㄣ",
        ["tzuei"] = "ㄗㄨㄟ", ["tzuen"] = "ㄗㄨㄣ", ["tsuei"] = "ㄘㄨㄟ",
        ["tsuen"] = "ㄘㄨㄣ", ["kiang"] = "ㄎㄧㄤ", ["shiau"] = "ㄒㄧㄠ",
        ["shian"] = "ㄒㄧㄢ", ["shiue"] = "ㄒㄩㄝ", ["shiou"] = "ㄒㄧㄡ",
        ["shiun"] = "ㄒㄩㄣ", ["jang"] = "ㄓㄤ", ["jeng"] = "ㄓㄥ",
        ["juai"] = "ㄓㄨㄞ", ["juan"] = "ㄓㄨㄢ", ["jung"] = "ㄓㄨㄥ",
        ["jiau"] = "ㄐㄧㄠ", ["jian"] = "ㄐㄧㄢ", ["jing"] = "ㄐㄧㄥ",
        ["jiue"] = "ㄐㄩㄝ", ["chie"] = "ㄑㄧㄝ", ["bang"] = "ㄅㄤ",
        ["beng"] = "ㄅㄥ", ["biau"] = "ㄅㄧㄠ", ["bian"] = "ㄅㄧㄢ",
        ["bing"] = "ㄅㄧㄥ", ["pang"] = "ㄆㄤ", ["peng"] = "ㄆㄥ",
        ["piau"] = "ㄆㄧㄠ", ["pian"] = "ㄆㄧㄢ", ["ping"] = "ㄆㄧㄥ",
        ["mang"] = "ㄇㄤ", ["meng"] = "ㄇㄥ", ["miau"] = "ㄇㄧㄠ",
        ["mian"] = "ㄇㄧㄢ", ["ming"] = "ㄇㄧㄥ", ["fang"] = "ㄈㄤ",
        ["feng"] = "ㄈㄥ", ["fiau"] = "ㄈㄧㄠ", ["dang"] = "ㄉㄤ",
        ["deng"] = "ㄉㄥ", ["diau"] = "ㄉㄧㄠ", ["dian"] = "ㄉㄧㄢ",
        ["ding"] = "ㄉㄧㄥ", ["duan"] = "ㄉㄨㄢ", ["dung"] = "ㄉㄨㄥ",
        ["tang"] = "ㄊㄤ", ["teng"] = "ㄊㄥ", ["tiau"] = "ㄊㄧㄠ",
        ["tian"] = "ㄊㄧㄢ", ["ting"] = "ㄊㄧㄥ", ["tuan"] = "ㄊㄨㄢ",
        ["tung"] = "ㄊㄨㄥ", ["nang"] = "ㄋㄤ", ["neng"] = "ㄋㄥ",
        ["niau"] = "ㄋㄧㄠ", ["nian"] = "ㄋㄧㄢ", ["ning"] = "ㄋㄧㄥ",
        ["nuan"] = "ㄋㄨㄢ", ["nung"] = "ㄋㄨㄥ", ["lang"] = "ㄌㄤ",
        ["leng"] = "ㄌㄥ", ["liau"] = "ㄌㄧㄠ", ["lian"] = "ㄌㄧㄢ",
        ["ling"] = "ㄌㄧㄥ", ["luan"] = "ㄌㄨㄢ", ["lung"] = "ㄌㄨㄥ",
        ["gang"] = "ㄍㄤ", ["geng"] = "ㄍㄥ", ["guai"] = "ㄍㄨㄞ",
        ["guan"] = "ㄍㄨㄢ", ["gung"] = "ㄍㄨㄥ", ["kang"] = "ㄎㄤ",
        ["keng"] = "ㄎㄥ", ["kuai"] = "ㄎㄨㄞ", ["kuan"] = "ㄎㄨㄢ",
        ["kung"] = "ㄎㄨㄥ", ["hang"] = "ㄏㄤ", ["heng"] = "ㄏㄥ",
        ["huai"] = "ㄏㄨㄞ", ["huan"] = "ㄏㄨㄢ", ["hung"] = "ㄏㄨㄥ",
        ["juei"] = "ㄓㄨㄟ", ["juen"] = "ㄓㄨㄣ", ["chai"] = "ㄔㄞ",
        ["chau"] = "ㄔㄠ", ["chou"] = "ㄔㄡ", ["chan"] = "ㄔㄢ",
        ["chen"] = "ㄔㄣ", ["chua"] = "ㄔㄨㄚ", ["shai"] = "ㄕㄞ",
        ["shei"] = "ㄕㄟ", ["shau"] = "ㄕㄠ", ["shou"] = "ㄕㄡ",
        ["shan"] = "ㄕㄢ", ["shen"] = "ㄕㄣ", ["shua"] = "ㄕㄨㄚ",
        ["shuo"] = "ㄕㄨㄛ", ["rang"] = "ㄖㄤ", ["reng"] = "ㄖㄥ",
        ["ruan"] = "ㄖㄨㄢ", ["rung"] = "ㄖㄨㄥ", ["sang"] = "ㄙㄤ",
        ["seng"] = "ㄙㄥ", ["suan"] = "ㄙㄨㄢ", ["sung"] = "ㄙㄨㄥ",
        ["yang"] = "ㄧㄤ", ["ying"] = "ㄧㄥ", ["wang"] = "ㄨㄤ",
        ["weng"] = "ㄨㄥ", ["yuan"] = "ㄩㄢ", ["yung"] = "ㄩㄥ",
        ["niue"] = "ㄋㄩㄝ", ["liue"] = "ㄌㄩㄝ", ["guei"] = "ㄍㄨㄟ",
        ["kuei"] = "ㄎㄨㄟ", ["jiou"] = "ㄐㄧㄡ", ["jiun"] = "ㄐㄩㄣ",
        ["chia"] = "ㄑㄧㄚ", ["chin"] = "ㄑㄧㄣ", ["shin"] = "ㄒㄧㄣ",
        ["tzai"] = "ㄗㄞ", ["tzei"] = "ㄗㄟ", ["tzau"] = "ㄗㄠ",
        ["tzou"] = "ㄗㄡ", ["tzan"] = "ㄗㄢ", ["tzen"] = "ㄗㄣ",
        ["tsai"] = "ㄘㄞ", ["tsau"] = "ㄘㄠ", ["tsou"] = "ㄘㄡ",
        ["tsan"] = "ㄘㄢ", ["tsen"] = "ㄘㄣ", ["chuo"] = "ㄔㄨㄛ",
        ["miou"] = "ㄇㄧㄡ", ["diou"] = "ㄉㄧㄡ", ["duei"] = "ㄉㄨㄟ",
        ["duen"] = "ㄉㄨㄣ", ["tuei"] = "ㄊㄨㄟ", ["tuen"] = "ㄊㄨㄣ",
        ["niou"] = "ㄋㄧㄡ", ["nuei"] = "ㄋㄨㄟ", ["nuen"] = "ㄋㄨㄣ",
        ["liou"] = "ㄌㄧㄡ", ["luen"] = "ㄌㄨㄣ", ["guen"] = "ㄍㄨㄣ",
        ["kuen"] = "ㄎㄨㄣ", ["huei"] = "ㄏㄨㄟ", ["huen"] = "ㄏㄨㄣ",
        ["ruei"] = "ㄖㄨㄟ", ["ruen"] = "ㄖㄨㄣ", ["tzuo"] = "ㄗㄨㄛ",
        ["tsuo"] = "ㄘㄨㄛ", ["suei"] = "ㄙㄨㄟ", ["suen"] = "ㄙㄨㄣ",
        ["chiu"] = "ㄑㄩ", ["giau"] = "ㄍㄧㄠ", ["shie"] = "ㄒㄧㄝ",
        ["shia"] = "ㄒㄧㄚ", ["shiu"] = "ㄒㄩ", ["jie"] = "ㄐㄧㄝ",
        ["jai"] = "ㄓㄞ", ["jei"] = "ㄓㄟ", ["jau"] = "ㄓㄠ",
        ["jou"] = "ㄓㄡ", ["jan"] = "ㄓㄢ", ["jen"] = "ㄓㄣ",
        ["jua"] = "ㄓㄨㄚ", ["bie"] = "ㄅㄧㄝ", ["pie"] = "ㄆㄧㄝ",
        ["mie"] = "ㄇㄧㄝ", ["die"] = "ㄉㄧㄝ", ["tie"] = "ㄊㄧㄝ",
        ["nie"] = "ㄋㄧㄝ", ["lie"] = "ㄌㄧㄝ", ["jia"] = "ㄐㄧㄚ",
        ["jin"] = "ㄐㄧㄣ", ["chr"] = "ㄔ", ["shr"] = "ㄕ",
        ["yue"] = "ㄩㄝ", ["juo"] = "ㄓㄨㄛ", ["bai"] = "ㄅㄞ",
        ["bei"] = "ㄅㄟ", ["bau"] = "ㄅㄠ", ["ban"] = "ㄅㄢ",
        ["ben"] = "ㄅㄣ", ["bin"] = "ㄅㄧㄣ", ["pai"] = "ㄆㄞ",
        ["pei"] = "ㄆㄟ", ["pau"] = "ㄆㄠ", ["pou"] = "ㄆㄡ",
        ["pan"] = "ㄆㄢ", ["pen"] = "ㄆㄣ", ["pia"] = "ㄆㄧㄚ",
        ["pin"] = "ㄆㄧㄣ", ["mai"] = "ㄇㄞ", ["mei"] = "ㄇㄟ",
        ["mau"] = "ㄇㄠ", ["mou"] = "ㄇㄡ", ["man"] = "ㄇㄢ",
        ["men"] = "ㄇㄣ", ["min"] = "ㄇㄧㄣ", ["fei"] = "ㄈㄟ",
        ["fou"] = "ㄈㄡ", ["fan"] = "ㄈㄢ", ["fen"] = "ㄈㄣ",
        ["dai"] = "ㄉㄞ", ["dei"] = "ㄉㄟ", ["dau"] = "ㄉㄠ",
        ["dou"] = "ㄉㄡ", ["dan"] = "ㄉㄢ", ["den"] = "ㄉㄣ",
        ["dia"] = "ㄉㄧㄚ", ["tai"] = "ㄊㄞ", ["tau"] = "ㄊㄠ",
        ["tou"] = "ㄊㄡ", ["tan"] = "ㄊㄢ", ["nai"] = "ㄋㄞ",
        ["nei"] = "ㄋㄟ", ["nau"] = "ㄋㄠ", ["nou"] = "ㄋㄡ",
        ["nan"] = "ㄋㄢ", ["nen"] = "ㄋㄣ", ["nin"] = "ㄋㄧㄣ",
        ["lai"] = "ㄌㄞ", ["lei"] = "ㄌㄟ", ["lau"] = "ㄌㄠ",
        ["lou"] = "ㄌㄡ", ["lan"] = "ㄌㄢ", ["lia"] = "ㄌㄧㄚ",
        ["lin"] = "ㄌㄧㄣ", ["gai"] = "ㄍㄞ", ["gei"] = "ㄍㄟ",
        ["gau"] = "ㄍㄠ", ["gou"] = "ㄍㄡ", ["gan"] = "ㄍㄢ",
        ["gen"] = "ㄍㄣ", ["gua"] = "ㄍㄨㄚ", ["guo"] = "ㄍㄨㄛ",
        ["gue"] = "ㄍㄨㄜ", ["kai"] = "ㄎㄞ", ["kau"] = "ㄎㄠ",
        ["kou"] = "ㄎㄡ", ["kan"] = "ㄎㄢ", ["ken"] = "ㄎㄣ",
        ["kua"] = "ㄎㄨㄚ", ["kuo"] = "ㄎㄨㄛ", ["hai"] = "ㄏㄞ",
        ["hei"] = "ㄏㄟ", ["hau"] = "ㄏㄠ", ["hou"] = "ㄏㄡ",
        ["han"] = "ㄏㄢ", ["hen"] = "ㄏㄣ", ["hua"] = "ㄏㄨㄚ",
        ["huo"] = "ㄏㄨㄛ", ["cha"] = "ㄔㄚ", ["che"] = "ㄔㄜ",
        ["chu"] = "ㄔㄨ", ["sha"] = "ㄕㄚ", ["she"] = "ㄕㄜ",
        ["shu"] = "ㄕㄨ", ["rau"] = "ㄖㄠ", ["rou"] = "ㄖㄡ",
        ["ran"] = "ㄖㄢ", ["ren"] = "ㄖㄣ", ["sai"] = "ㄙㄞ",
        ["sei"] = "ㄙㄟ", ["sau"] = "ㄙㄠ", ["sou"] = "ㄙㄡ",
        ["san"] = "ㄙㄢ", ["sen"] = "ㄙㄣ", ["ang"] = "ㄤ",
        ["eng"] = "ㄥ", ["yai"] = "ㄧㄞ", ["yau"] = "ㄧㄠ",
        ["yan"] = "ㄧㄢ", ["yin"] = "ㄧㄣ", ["wai"] = "ㄨㄞ",
        ["wei"] = "ㄨㄟ", ["wan"] = "ㄨㄢ", ["wen"] = "ㄨㄣ",
        ["yun"] = "ㄩㄣ", ["jiu"] = "ㄐㄩ", ["chi"] = "ㄑㄧ",
        ["shi"] = "ㄒㄧ", ["tza"] = "ㄗㄚ", ["tze"] = "ㄗㄜ",
        ["tzu"] = "ㄗㄨ", ["tsz"] = "ㄘ", ["tsa"] = "ㄘㄚ",
        ["tse"] = "ㄘㄜ", ["tsu"] = "ㄘㄨ", ["duo"] = "ㄉㄨㄛ",
        ["tuo"] = "ㄊㄨㄛ", ["nuo"] = "ㄋㄨㄛ", ["luo"] = "ㄌㄨㄛ",
        ["ruo"] = "ㄖㄨㄛ", ["suo"] = "ㄙㄨㄛ", ["you"] = "ㄧㄡ",
        ["niu"] = "ㄋㄩ", ["liu"] = "ㄌㄩ", ["gin"] = "ㄍㄧㄣ",
        ["bo"] = "ㄅㄛ", ["po"] = "ㄆㄛ", ["mo"] = "ㄇㄛ",
        ["fo"] = "ㄈㄛ", ["jr"] = "ㄓ", ["ja"] = "ㄓㄚ",
        ["je"] = "ㄓㄜ", ["ju"] = "ㄓㄨ", ["ji"] = "ㄐㄧ",
        ["tz"] = "ㄗ", ["sz"] = "ㄙ", ["er"] = "ㄦ",
        ["ye"] = "ㄧㄝ", ["ba"] = "ㄅㄚ", ["bi"] = "ㄅㄧ",
        ["bu"] = "ㄅㄨ", ["pa"] = "ㄆㄚ", ["pi"] = "ㄆㄧ",
        ["pu"] = "ㄆㄨ", ["ma"] = "ㄇㄚ", ["me"] = "ㄇㄜ",
        ["mi"] = "ㄇㄧ", ["mu"] = "ㄇㄨ", ["fa"] = "ㄈㄚ",
        ["fu"] = "ㄈㄨ", ["da"] = "ㄉㄚ", ["de"] = "ㄉㄜ",
        ["di"] = "ㄉㄧ", ["du"] = "ㄉㄨ", ["ta"] = "ㄊㄚ",
        ["te"] = "ㄊㄜ", ["ti"] = "ㄊㄧ", ["tu"] = "ㄊㄨ",
        ["na"] = "ㄋㄚ", ["ne"] = "ㄋㄜ", ["ni"] = "ㄋㄧ",
        ["nu"] = "ㄋㄨ", ["la"] = "ㄌㄚ", ["lo"] = "ㄌㄛ",
        ["le"] = "ㄌㄜ", ["li"] = "ㄌㄧ", ["lu"] = "ㄌㄨ",
        ["ga"] = "ㄍㄚ", ["ge"] = "ㄍㄜ", ["gu"] = "ㄍㄨ",
        ["ka"] = "ㄎㄚ", ["ke"] = "ㄎㄜ", ["ku"] = "ㄎㄨ",
        ["ha"] = "ㄏㄚ", ["he"] = "ㄏㄜ", ["hu"] = "ㄏㄨ",
        ["re"] = "ㄖㄜ", ["ru"] = "ㄖㄨ", ["sa"] = "ㄙㄚ",
        ["se"] = "ㄙㄜ", ["su"] = "ㄙㄨ", ["eh"] = "ㄝ",
        ["ai"] = "ㄞ", ["ei"] = "ㄟ", ["au"] = "ㄠ",
        ["ou"] = "ㄡ", ["an"] = "ㄢ", ["en"] = "ㄣ",
        ["ya"] = "ㄧㄚ", ["yo"] = "ㄧㄛ", ["wu"] = "ㄨ",
        ["wa"] = "ㄨㄚ", ["wo"] = "ㄨㄛ", ["yu"] = "ㄩ",
        ["ch"] = "ㄑ", ["yi"] = "ㄧ", ["r"] = "ㄖ",
        ["a"] = "ㄚ", ["o"] = "ㄛ", ["e"] = "ㄜ"
      };

    /// <summary>
    /// 耶魯拼音排列專用處理陣列
    /// </summary>
    public static readonly Dictionary<string, string> MapYalePinyin =
      new Dictionary<string, string> {
        ["chwang"] = "ㄔㄨㄤ", ["shwang"] = "ㄕㄨㄤ", ["chyang"] = "ㄑㄧㄤ",
        ["chyung"] = "ㄑㄩㄥ", ["chywan"] = "ㄑㄩㄢ", ["byang"] = "ㄅㄧㄤ",
        ["dwang"] = "ㄉㄨㄤ", ["jwang"] = "ㄓㄨㄤ", ["syang"] = "ㄒㄧㄤ",
        ["syung"] = "ㄒㄩㄥ", ["jyang"] = "ㄐㄧㄤ", ["jyung"] = "ㄐㄩㄥ",
        ["nyang"] = "ㄋㄧㄤ", ["lyang"] = "ㄌㄧㄤ", ["gwang"] = "ㄍㄨㄤ",
        ["kwang"] = "ㄎㄨㄤ", ["hwang"] = "ㄏㄨㄤ", ["chang"] = "ㄔㄤ",
        ["cheng"] = "ㄔㄥ", ["chwai"] = "ㄔㄨㄞ", ["chwan"] = "ㄔㄨㄢ",
        ["chung"] = "ㄔㄨㄥ", ["shang"] = "ㄕㄤ", ["sheng"] = "ㄕㄥ",
        ["shwai"] = "ㄕㄨㄞ", ["shwan"] = "ㄕㄨㄢ", ["sywan"] = "ㄒㄩㄢ",
        ["jywan"] = "ㄐㄩㄢ", ["chyau"] = "ㄑㄧㄠ", ["chyan"] = "ㄑㄧㄢ",
        ["ching"] = "ㄑㄧㄥ", ["sying"] = "ㄒㄧㄥ", ["dzang"] = "ㄗㄤ",
        ["dzeng"] = "ㄗㄥ", ["dzwan"] = "ㄗㄨㄢ", ["dzung"] = "ㄗㄨㄥ",
        ["tsang"] = "ㄘㄤ", ["tseng"] = "ㄘㄥ", ["tswan"] = "ㄘㄨㄢ",
        ["tsung"] = "ㄘㄨㄥ", ["chywe"] = "ㄑㄩㄝ", ["lywan"] = "ㄌㄩㄢ",
        ["chwei"] = "ㄔㄨㄟ", ["chwun"] = "ㄔㄨㄣ", ["shwei"] = "ㄕㄨㄟ",
        ["shwun"] = "ㄕㄨㄣ", ["chyou"] = "ㄑㄧㄡ", ["chyun"] = "ㄑㄩㄣ",
        ["dzwei"] = "ㄗㄨㄟ", ["dzwun"] = "ㄗㄨㄣ", ["tswei"] = "ㄘㄨㄟ",
        ["tswun"] = "ㄘㄨㄣ", ["kyang"] = "ㄎㄧㄤ", ["jang"] = "ㄓㄤ",
        ["jeng"] = "ㄓㄥ", ["jwai"] = "ㄓㄨㄞ", ["jwan"] = "ㄓㄨㄢ",
        ["jung"] = "ㄓㄨㄥ", ["syau"] = "ㄒㄧㄠ", ["syan"] = "ㄒㄧㄢ",
        ["jyau"] = "ㄐㄧㄠ", ["jyan"] = "ㄐㄧㄢ", ["jing"] = "ㄐㄧㄥ",
        ["sywe"] = "ㄒㄩㄝ", ["jywe"] = "ㄐㄩㄝ", ["chye"] = "ㄑㄧㄝ",
        ["bang"] = "ㄅㄤ", ["beng"] = "ㄅㄥ", ["byau"] = "ㄅㄧㄠ",
        ["byan"] = "ㄅㄧㄢ", ["bing"] = "ㄅㄧㄥ", ["pang"] = "ㄆㄤ",
        ["peng"] = "ㄆㄥ", ["pyau"] = "ㄆㄧㄠ", ["pyan"] = "ㄆㄧㄢ",
        ["ping"] = "ㄆㄧㄥ", ["mang"] = "ㄇㄤ", ["meng"] = "ㄇㄥ",
        ["myau"] = "ㄇㄧㄠ", ["myan"] = "ㄇㄧㄢ", ["ming"] = "ㄇㄧㄥ",
        ["fang"] = "ㄈㄤ", ["feng"] = "ㄈㄥ", ["fyau"] = "ㄈㄧㄠ",
        ["dang"] = "ㄉㄤ", ["deng"] = "ㄉㄥ", ["dyau"] = "ㄉㄧㄠ",
        ["dyan"] = "ㄉㄧㄢ", ["ding"] = "ㄉㄧㄥ", ["dwan"] = "ㄉㄨㄢ",
        ["dung"] = "ㄉㄨㄥ", ["tang"] = "ㄊㄤ", ["teng"] = "ㄊㄥ",
        ["tyau"] = "ㄊㄧㄠ", ["tyan"] = "ㄊㄧㄢ", ["ting"] = "ㄊㄧㄥ",
        ["twan"] = "ㄊㄨㄢ", ["tung"] = "ㄊㄨㄥ", ["nang"] = "ㄋㄤ",
        ["neng"] = "ㄋㄥ", ["nyau"] = "ㄋㄧㄠ", ["nyan"] = "ㄋㄧㄢ",
        ["ning"] = "ㄋㄧㄥ", ["nwan"] = "ㄋㄨㄢ", ["nung"] = "ㄋㄨㄥ",
        ["lang"] = "ㄌㄤ", ["leng"] = "ㄌㄥ", ["lyau"] = "ㄌㄧㄠ",
        ["lyan"] = "ㄌㄧㄢ", ["ling"] = "ㄌㄧㄥ", ["lwan"] = "ㄌㄨㄢ",
        ["lung"] = "ㄌㄨㄥ", ["gang"] = "ㄍㄤ", ["geng"] = "ㄍㄥ",
        ["gwai"] = "ㄍㄨㄞ", ["gwan"] = "ㄍㄨㄢ", ["gung"] = "ㄍㄨㄥ",
        ["kang"] = "ㄎㄤ", ["keng"] = "ㄎㄥ", ["kwai"] = "ㄎㄨㄞ",
        ["kwan"] = "ㄎㄨㄢ", ["kung"] = "ㄎㄨㄥ", ["hang"] = "ㄏㄤ",
        ["heng"] = "ㄏㄥ", ["hwai"] = "ㄏㄨㄞ", ["hwan"] = "ㄏㄨㄢ",
        ["hung"] = "ㄏㄨㄥ", ["jwei"] = "ㄓㄨㄟ", ["jwun"] = "ㄓㄨㄣ",
        ["chai"] = "ㄔㄞ", ["chau"] = "ㄔㄠ", ["chou"] = "ㄔㄡ",
        ["chan"] = "ㄔㄢ", ["chen"] = "ㄔㄣ", ["chwa"] = "ㄔㄨㄚ",
        ["shai"] = "ㄕㄞ", ["shei"] = "ㄕㄟ", ["shau"] = "ㄕㄠ",
        ["shou"] = "ㄕㄡ", ["shan"] = "ㄕㄢ", ["shen"] = "ㄕㄣ",
        ["shwa"] = "ㄕㄨㄚ", ["shwo"] = "ㄕㄨㄛ", ["rang"] = "ㄖㄤ",
        ["reng"] = "ㄖㄥ", ["rwan"] = "ㄖㄨㄢ", ["rung"] = "ㄖㄨㄥ",
        ["sang"] = "ㄙㄤ", ["seng"] = "ㄙㄥ", ["swan"] = "ㄙㄨㄢ",
        ["sung"] = "ㄙㄨㄥ", ["yang"] = "ㄧㄤ", ["ying"] = "ㄧㄥ",
        ["wang"] = "ㄨㄤ", ["weng"] = "ㄨㄥ", ["ywan"] = "ㄩㄢ",
        ["yung"] = "ㄩㄥ", ["syou"] = "ㄒㄧㄡ", ["syun"] = "ㄒㄩㄣ",
        ["nywe"] = "ㄋㄩㄝ", ["lywe"] = "ㄌㄩㄝ", ["gwei"] = "ㄍㄨㄟ",
        ["kwei"] = "ㄎㄨㄟ", ["jyou"] = "ㄐㄧㄡ", ["jyun"] = "ㄐㄩㄣ",
        ["chya"] = "ㄑㄧㄚ", ["chin"] = "ㄑㄧㄣ", ["syin"] = "ㄒㄧㄣ",
        ["dzai"] = "ㄗㄞ", ["dzei"] = "ㄗㄟ", ["dzau"] = "ㄗㄠ",
        ["dzou"] = "ㄗㄡ", ["dzan"] = "ㄗㄢ", ["dzen"] = "ㄗㄣ",
        ["tsai"] = "ㄘㄞ", ["tsau"] = "ㄘㄠ", ["tsou"] = "ㄘㄡ",
        ["tsan"] = "ㄘㄢ", ["tsen"] = "ㄘㄣ", ["chwo"] = "ㄔㄨㄛ",
        ["myou"] = "ㄇㄧㄡ", ["dyou"] = "ㄉㄧㄡ", ["dwei"] = "ㄉㄨㄟ",
        ["dwun"] = "ㄉㄨㄣ", ["twei"] = "ㄊㄨㄟ", ["twun"] = "ㄊㄨㄣ",
        ["nyou"] = "ㄋㄧㄡ", ["nwei"] = "ㄋㄨㄟ", ["nwun"] = "ㄋㄨㄣ",
        ["lyou"] = "ㄌㄧㄡ", ["lwun"] = "ㄌㄨㄣ", ["gwun"] = "ㄍㄨㄣ",
        ["kwun"] = "ㄎㄨㄣ", ["hwei"] = "ㄏㄨㄟ", ["hwun"] = "ㄏㄨㄣ",
        ["rwei"] = "ㄖㄨㄟ", ["rwun"] = "ㄖㄨㄣ", ["dzwo"] = "ㄗㄨㄛ",
        ["tswo"] = "ㄘㄨㄛ", ["swei"] = "ㄙㄨㄟ", ["swun"] = "ㄙㄨㄣ",
        ["chyu"] = "ㄑㄩ", ["giau"] = "ㄍㄧㄠ", ["sye"] = "ㄒㄧㄝ",
        ["jye"] = "ㄐㄧㄝ", ["jai"] = "ㄓㄞ", ["jei"] = "ㄓㄟ",
        ["jau"] = "ㄓㄠ", ["jou"] = "ㄓㄡ", ["jan"] = "ㄓㄢ",
        ["jen"] = "ㄓㄣ", ["jwa"] = "ㄓㄨㄚ", ["sya"] = "ㄒㄧㄚ",
        ["bye"] = "ㄅㄧㄝ", ["pye"] = "ㄆㄧㄝ", ["mye"] = "ㄇㄧㄝ",
        ["dye"] = "ㄉㄧㄝ", ["tye"] = "ㄊㄧㄝ", ["nye"] = "ㄋㄧㄝ",
        ["lye"] = "ㄌㄧㄝ", ["jya"] = "ㄐㄧㄚ", ["jin"] = "ㄐㄧㄣ",
        ["chr"] = "ㄔ", ["shr"] = "ㄕ", ["ywe"] = "ㄩㄝ",
        ["jwo"] = "ㄓㄨㄛ", ["bai"] = "ㄅㄞ", ["bei"] = "ㄅㄟ",
        ["bau"] = "ㄅㄠ", ["ban"] = "ㄅㄢ", ["ben"] = "ㄅㄣ",
        ["bin"] = "ㄅㄧㄣ", ["pai"] = "ㄆㄞ", ["pei"] = "ㄆㄟ",
        ["pau"] = "ㄆㄠ", ["pou"] = "ㄆㄡ", ["pan"] = "ㄆㄢ",
        ["pen"] = "ㄆㄣ", ["pya"] = "ㄆㄧㄚ", ["pin"] = "ㄆㄧㄣ",
        ["mai"] = "ㄇㄞ", ["mei"] = "ㄇㄟ", ["mau"] = "ㄇㄠ",
        ["mou"] = "ㄇㄡ", ["man"] = "ㄇㄢ", ["men"] = "ㄇㄣ",
        ["min"] = "ㄇㄧㄣ", ["fei"] = "ㄈㄟ", ["fou"] = "ㄈㄡ",
        ["fan"] = "ㄈㄢ", ["fen"] = "ㄈㄣ", ["dai"] = "ㄉㄞ",
        ["dei"] = "ㄉㄟ", ["dau"] = "ㄉㄠ", ["dou"] = "ㄉㄡ",
        ["dan"] = "ㄉㄢ", ["den"] = "ㄉㄣ", ["dya"] = "ㄉㄧㄚ",
        ["tai"] = "ㄊㄞ", ["tau"] = "ㄊㄠ", ["tou"] = "ㄊㄡ",
        ["tan"] = "ㄊㄢ", ["nai"] = "ㄋㄞ", ["nei"] = "ㄋㄟ",
        ["nau"] = "ㄋㄠ", ["nou"] = "ㄋㄡ", ["nan"] = "ㄋㄢ",
        ["nen"] = "ㄋㄣ", ["nin"] = "ㄋㄧㄣ", ["lai"] = "ㄌㄞ",
        ["lei"] = "ㄌㄟ", ["lau"] = "ㄌㄠ", ["lou"] = "ㄌㄡ",
        ["lan"] = "ㄌㄢ", ["lya"] = "ㄌㄧㄚ", ["lin"] = "ㄌㄧㄣ",
        ["gai"] = "ㄍㄞ", ["gei"] = "ㄍㄟ", ["gau"] = "ㄍㄠ",
        ["gou"] = "ㄍㄡ", ["gan"] = "ㄍㄢ", ["gen"] = "ㄍㄣ",
        ["gwa"] = "ㄍㄨㄚ", ["gwo"] = "ㄍㄨㄛ", ["gue"] = "ㄍㄨㄜ",
        ["kai"] = "ㄎㄞ", ["kau"] = "ㄎㄠ", ["kou"] = "ㄎㄡ",
        ["kan"] = "ㄎㄢ", ["ken"] = "ㄎㄣ", ["kwa"] = "ㄎㄨㄚ",
        ["kwo"] = "ㄎㄨㄛ", ["hai"] = "ㄏㄞ", ["hei"] = "ㄏㄟ",
        ["hau"] = "ㄏㄠ", ["hou"] = "ㄏㄡ", ["han"] = "ㄏㄢ",
        ["hen"] = "ㄏㄣ", ["hwa"] = "ㄏㄨㄚ", ["hwo"] = "ㄏㄨㄛ",
        ["cha"] = "ㄔㄚ", ["che"] = "ㄔㄜ", ["chu"] = "ㄔㄨ",
        ["sha"] = "ㄕㄚ", ["she"] = "ㄕㄜ", ["shu"] = "ㄕㄨ",
        ["rau"] = "ㄖㄠ", ["rou"] = "ㄖㄡ", ["ran"] = "ㄖㄢ",
        ["ren"] = "ㄖㄣ", ["sai"] = "ㄙㄞ", ["sei"] = "ㄙㄟ",
        ["sau"] = "ㄙㄠ", ["sou"] = "ㄙㄡ", ["san"] = "ㄙㄢ",
        ["sen"] = "ㄙㄣ", ["ang"] = "ㄤ", ["eng"] = "ㄥ",
        ["yai"] = "ㄧㄞ", ["yau"] = "ㄧㄠ", ["yan"] = "ㄧㄢ",
        ["yin"] = "ㄧㄣ", ["wai"] = "ㄨㄞ", ["wei"] = "ㄨㄟ",
        ["wan"] = "ㄨㄢ", ["wen"] = "ㄨㄣ", ["yun"] = "ㄩㄣ",
        ["syu"] = "ㄒㄩ", ["jyu"] = "ㄐㄩ", ["chi"] = "ㄑㄧ",
        ["syi"] = "ㄒㄧ", ["dza"] = "ㄗㄚ", ["dze"] = "ㄗㄜ",
        ["dzu"] = "ㄗㄨ", ["tsz"] = "ㄘ", ["tsa"] = "ㄘㄚ",
        ["tse"] = "ㄘㄜ", ["tsu"] = "ㄘㄨ", ["dwo"] = "ㄉㄨㄛ",
        ["two"] = "ㄊㄨㄛ", ["nwo"] = "ㄋㄨㄛ", ["lwo"] = "ㄌㄨㄛ",
        ["rwo"] = "ㄖㄨㄛ", ["swo"] = "ㄙㄨㄛ", ["you"] = "ㄧㄡ",
        ["nyu"] = "ㄋㄩ", ["lyu"] = "ㄌㄩ", ["bwo"] = "ㄅㄛ",
        ["pwo"] = "ㄆㄛ", ["mwo"] = "ㄇㄛ", ["fwo"] = "ㄈㄛ",
        ["gin"] = "ㄍㄧㄣ", ["jr"] = "ㄓ", ["ja"] = "ㄓㄚ",
        ["je"] = "ㄓㄜ", ["ju"] = "ㄓㄨ", ["ji"] = "ㄐㄧ",
        ["dz"] = "ㄗ", ["sz"] = "ㄙ", ["er"] = "ㄦ",
        ["ye"] = "ㄧㄝ", ["ba"] = "ㄅㄚ", ["bi"] = "ㄅㄧ",
        ["bu"] = "ㄅㄨ", ["pa"] = "ㄆㄚ", ["pi"] = "ㄆㄧ",
        ["pu"] = "ㄆㄨ", ["ma"] = "ㄇㄚ", ["me"] = "ㄇㄜ",
        ["mi"] = "ㄇㄧ", ["mu"] = "ㄇㄨ", ["fa"] = "ㄈㄚ",
        ["fu"] = "ㄈㄨ", ["da"] = "ㄉㄚ", ["de"] = "ㄉㄜ",
        ["di"] = "ㄉㄧ", ["du"] = "ㄉㄨ", ["ta"] = "ㄊㄚ",
        ["te"] = "ㄊㄜ", ["ti"] = "ㄊㄧ", ["tu"] = "ㄊㄨ",
        ["na"] = "ㄋㄚ", ["ne"] = "ㄋㄜ", ["ni"] = "ㄋㄧ",
        ["nu"] = "ㄋㄨ", ["la"] = "ㄌㄚ", ["lo"] = "ㄌㄛ",
        ["le"] = "ㄌㄜ", ["li"] = "ㄌㄧ", ["lu"] = "ㄌㄨ",
        ["ga"] = "ㄍㄚ", ["ge"] = "ㄍㄜ", ["gu"] = "ㄍㄨ",
        ["ka"] = "ㄎㄚ", ["ke"] = "ㄎㄜ", ["ku"] = "ㄎㄨ",
        ["ha"] = "ㄏㄚ", ["he"] = "ㄏㄜ", ["hu"] = "ㄏㄨ",
        ["re"] = "ㄖㄜ", ["ru"] = "ㄖㄨ", ["sa"] = "ㄙㄚ",
        ["se"] = "ㄙㄜ", ["su"] = "ㄙㄨ", ["eh"] = "ㄝ",
        ["ai"] = "ㄞ", ["ei"] = "ㄟ", ["au"] = "ㄠ",
        ["ou"] = "ㄡ", ["an"] = "ㄢ", ["en"] = "ㄣ",
        ["ya"] = "ㄧㄚ", ["yo"] = "ㄧㄛ", ["wu"] = "ㄨ",
        ["wa"] = "ㄨㄚ", ["wo"] = "ㄨㄛ", ["yu"] = "ㄩ",
        ["ch"] = "ㄑ", ["yi"] = "ㄧ", ["r"] = "ㄖ",
        ["a"] = "ㄚ", ["o"] = "ㄛ", ["e"] = "ㄜ"
      };

    /// <summary>
    /// 華羅拼音排列專用處理陣列
    /// </summary>
    public static readonly Dictionary<string, string> MapHualuoPinyin =
      new Dictionary<string, string> {
        ["shuang"] = "ㄕㄨㄤ", ["jhuang"] = "ㄓㄨㄤ", ["chyueh"] = "ㄑㄩㄝ",
        ["chyuan"] = "ㄑㄩㄢ", ["chyong"] = "ㄑㄩㄥ", ["chiang"] = "ㄑㄧㄤ",
        ["chuang"] = "ㄔㄨㄤ", ["biang"] = "ㄅㄧㄤ", ["duang"] = "ㄉㄨㄤ",
        ["kyang"] = "ㄎㄧㄤ", ["syueh"] = "ㄒㄩㄝ", ["syuan"] = "ㄒㄩㄢ",
        ["syong"] = "ㄒㄩㄥ", ["sihei"] = "ㄙㄟ", ["siang"] = "ㄒㄧㄤ",
        ["shuei"] = "ㄕㄨㄟ", ["shuan"] = "ㄕㄨㄢ", ["shuai"] = "ㄕㄨㄞ",
        ["sheng"] = "ㄕㄥ", ["shang"] = "ㄕㄤ", ["nyueh"] = "ㄋㄩㄝ",
        ["niang"] = "ㄋㄧㄤ", ["lyueh"] = "ㄌㄩㄝ", ["lyuan"] = "ㄌㄩㄢ",
        ["liang"] = "ㄌㄧㄤ", ["kuang"] = "ㄎㄨㄤ", ["jyueh"] = "ㄐㄩㄝ",
        ["jyuan"] = "ㄐㄩㄢ", ["jyong"] = "ㄐㄩㄥ", ["jiang"] = "ㄐㄧㄤ",
        ["jhuei"] = "ㄓㄨㄟ", ["jhuan"] = "ㄓㄨㄢ", ["jhuai"] = "ㄓㄨㄞ",
        ["jhong"] = "ㄓㄨㄥ", ["jheng"] = "ㄓㄥ", ["jhang"] = "ㄓㄤ",
        ["huang"] = "ㄏㄨㄤ", ["guang"] = "ㄍㄨㄤ", ["chyun"] = "ㄑㄩㄣ",
        ["tsuei"] = "ㄘㄨㄟ", ["tsuan"] = "ㄘㄨㄢ", ["tsong"] = "ㄘㄨㄥ",
        ["chiou"] = "ㄑㄧㄡ", ["ching"] = "ㄑㄧㄥ", ["chieh"] = "ㄑㄧㄝ",
        ["chiao"] = "ㄑㄧㄠ", ["chian"] = "ㄑㄧㄢ", ["chuei"] = "ㄔㄨㄟ",
        ["chuan"] = "ㄔㄨㄢ", ["chuai"] = "ㄔㄨㄞ", ["chong"] = "ㄔㄨㄥ",
        ["cheng"] = "ㄔㄥ", ["chang"] = "ㄔㄤ", ["tseng"] = "ㄘㄥ",
        ["tsang"] = "ㄘㄤ", ["gyao"] = "ㄍㄧㄠ", ["fiao"] = "ㄈㄧㄠ",
        ["zuei"] = "ㄗㄨㄟ", ["zuan"] = "ㄗㄨㄢ", ["zong"] = "ㄗㄨㄥ",
        ["zeng"] = "ㄗㄥ", ["zang"] = "ㄗㄤ", ["yueh"] = "ㄩㄝ",
        ["yuan"] = "ㄩㄢ", ["yong"] = "ㄩㄥ", ["ying"] = "ㄧㄥ",
        ["yang"] = "ㄧㄤ", ["wong"] = "ㄨㄥ", ["wang"] = "ㄨㄤ",
        ["tuei"] = "ㄊㄨㄟ", ["tuan"] = "ㄊㄨㄢ", ["tong"] = "ㄊㄨㄥ",
        ["ting"] = "ㄊㄧㄥ", ["tieh"] = "ㄊㄧㄝ", ["tiao"] = "ㄊㄧㄠ",
        ["tian"] = "ㄊㄧㄢ", ["teng"] = "ㄊㄥ", ["tang"] = "ㄊㄤ",
        ["syun"] = "ㄒㄩㄣ", ["suei"] = "ㄙㄨㄟ", ["suan"] = "ㄙㄨㄢ",
        ["song"] = "ㄙㄨㄥ", ["siou"] = "ㄒㄧㄡ", ["sing"] = "ㄒㄧㄥ",
        ["sieh"] = "ㄒㄧㄝ", ["siao"] = "ㄒㄧㄠ", ["sian"] = "ㄒㄧㄢ",
        ["shuo"] = "ㄕㄨㄛ", ["shun"] = "ㄕㄨㄣ", ["shua"] = "ㄕㄨㄚ",
        ["shou"] = "ㄕㄡ", ["shih"] = "ㄕ", ["shen"] = "ㄕㄣ",
        ["shei"] = "ㄕㄟ", ["shao"] = "ㄕㄠ", ["shan"] = "ㄕㄢ",
        ["shai"] = "ㄕㄞ", ["seng"] = "ㄙㄥ", ["sang"] = "ㄙㄤ",
        ["ruei"] = "ㄖㄨㄟ", ["ruan"] = "ㄖㄨㄢ", ["rong"] = "ㄖㄨㄥ",
        ["reng"] = "ㄖㄥ", ["rang"] = "ㄖㄤ", ["ping"] = "ㄆㄧㄥ",
        ["pieh"] = "ㄆㄧㄝ", ["piao"] = "ㄆㄧㄠ", ["pian"] = "ㄆㄧㄢ",
        ["peng"] = "ㄆㄥ", ["pang"] = "ㄆㄤ", ["nuei"] = "ㄋㄨㄟ",
        ["nuan"] = "ㄋㄨㄢ", ["nong"] = "ㄋㄨㄥ", ["niou"] = "ㄋㄧㄡ",
        ["ning"] = "ㄋㄧㄥ", ["nieh"] = "ㄋㄧㄝ", ["niao"] = "ㄋㄧㄠ",
        ["nian"] = "ㄋㄧㄢ", ["neng"] = "ㄋㄥ", ["nang"] = "ㄋㄤ",
        ["miou"] = "ㄇㄧㄡ", ["ming"] = "ㄇㄧㄥ", ["mieh"] = "ㄇㄧㄝ",
        ["miao"] = "ㄇㄧㄠ", ["mian"] = "ㄇㄧㄢ", ["meng"] = "ㄇㄥ",
        ["mang"] = "ㄇㄤ", ["luan"] = "ㄌㄨㄢ", ["long"] = "ㄌㄨㄥ",
        ["liou"] = "ㄌㄧㄡ", ["ling"] = "ㄌㄧㄥ", ["lieh"] = "ㄌㄧㄝ",
        ["liao"] = "ㄌㄧㄠ", ["lian"] = "ㄌㄧㄢ", ["leng"] = "ㄌㄥ",
        ["lang"] = "ㄌㄤ", ["kuei"] = "ㄎㄨㄟ", ["kuan"] = "ㄎㄨㄢ",
        ["kuai"] = "ㄎㄨㄞ", ["kong"] = "ㄎㄨㄥ", ["keng"] = "ㄎㄥ",
        ["kang"] = "ㄎㄤ", ["jyun"] = "ㄐㄩㄣ", ["jiou"] = "ㄐㄧㄡ",
        ["jing"] = "ㄐㄧㄥ", ["jieh"] = "ㄐㄧㄝ", ["jiao"] = "ㄐㄧㄠ",
        ["jian"] = "ㄐㄧㄢ", ["jhuo"] = "ㄓㄨㄛ", ["jhun"] = "ㄓㄨㄣ",
        ["jhua"] = "ㄓㄨㄚ", ["jhou"] = "ㄓㄡ", ["jhih"] = "ㄓ",
        ["jhen"] = "ㄓㄣ", ["jhei"] = "ㄓㄟ", ["jhao"] = "ㄓㄠ",
        ["jhan"] = "ㄓㄢ", ["jhai"] = "ㄓㄞ", ["huei"] = "ㄏㄨㄟ",
        ["huan"] = "ㄏㄨㄢ", ["huai"] = "ㄏㄨㄞ", ["hong"] = "ㄏㄨㄥ",
        ["heng"] = "ㄏㄥ", ["hang"] = "ㄏㄤ", ["guei"] = "ㄍㄨㄟ",
        ["guan"] = "ㄍㄨㄢ", ["guai"] = "ㄍㄨㄞ", ["gong"] = "ㄍㄨㄥ",
        ["geng"] = "ㄍㄥ", ["gang"] = "ㄍㄤ", ["feng"] = "ㄈㄥ",
        ["fang"] = "ㄈㄤ", ["duei"] = "ㄉㄨㄟ", ["duan"] = "ㄉㄨㄢ",
        ["dong"] = "ㄉㄨㄥ", ["diou"] = "ㄉㄧㄡ", ["ding"] = "ㄉㄧㄥ",
        ["dieh"] = "ㄉㄧㄝ", ["diao"] = "ㄉㄧㄠ", ["dian"] = "ㄉㄧㄢ",
        ["deng"] = "ㄉㄥ", ["dang"] = "ㄉㄤ", ["chyu"] = "ㄑㄩ",
        ["tsuo"] = "ㄘㄨㄛ", ["tsun"] = "ㄘㄨㄣ", ["tsou"] = "ㄘㄡ",
        ["chin"] = "ㄑㄧㄣ", ["tsih"] = "ㄘ", ["chia"] = "ㄑㄧㄚ",
        ["chuo"] = "ㄔㄨㄛ", ["chun"] = "ㄔㄨㄣ", ["chua"] = "ㄔㄨㄚ",
        ["chou"] = "ㄔㄡ", ["chih"] = "ㄔ", ["chen"] = "ㄔㄣ",
        ["chao"] = "ㄔㄠ", ["chan"] = "ㄔㄢ", ["chai"] = "ㄔㄞ",
        ["tsen"] = "ㄘㄣ", ["tsao"] = "ㄘㄠ", ["tsan"] = "ㄘㄢ",
        ["tsai"] = "ㄘㄞ", ["bing"] = "ㄅㄧㄥ", ["bieh"] = "ㄅㄧㄝ",
        ["biao"] = "ㄅㄧㄠ", ["bian"] = "ㄅㄧㄢ", ["beng"] = "ㄅㄥ",
        ["bang"] = "ㄅㄤ", ["gin"] = "ㄍㄧㄣ", ["den"] = "ㄉㄣ",
        ["zuo"] = "ㄗㄨㄛ", ["zun"] = "ㄗㄨㄣ", ["zou"] = "ㄗㄡ",
        ["zih"] = "ㄗ", ["zen"] = "ㄗㄣ", ["zei"] = "ㄗㄟ",
        ["zao"] = "ㄗㄠ", ["zan"] = "ㄗㄢ", ["zai"] = "ㄗㄞ",
        ["yun"] = "ㄩㄣ", ["you"] = "ㄧㄡ", ["yin"] = "ㄧㄣ",
        ["yeh"] = "ㄧㄝ", ["yao"] = "ㄧㄠ", ["yan"] = "ㄧㄢ",
        ["yai"] = "ㄧㄞ", ["wun"] = "ㄨㄣ", ["wei"] = "ㄨㄟ",
        ["wan"] = "ㄨㄢ", ["wai"] = "ㄨㄞ", ["tuo"] = "ㄊㄨㄛ",
        ["tun"] = "ㄊㄨㄣ", ["tou"] = "ㄊㄡ", ["tao"] = "ㄊㄠ",
        ["tan"] = "ㄊㄢ", ["tai"] = "ㄊㄞ", ["syu"] = "ㄒㄩ",
        ["suo"] = "ㄙㄨㄛ", ["sun"] = "ㄙㄨㄣ", ["sou"] = "ㄙㄡ",
        ["sin"] = "ㄒㄧㄣ", ["sih"] = "ㄙ", ["sia"] = "ㄒㄧㄚ",
        ["shu"] = "ㄕㄨ", ["she"] = "ㄕㄜ", ["sha"] = "ㄕㄚ",
        ["sen"] = "ㄙㄣ", ["sao"] = "ㄙㄠ", ["san"] = "ㄙㄢ",
        ["sai"] = "ㄙㄞ", ["ruo"] = "ㄖㄨㄛ", ["run"] = "ㄖㄨㄣ",
        ["rou"] = "ㄖㄡ", ["rih"] = "ㄖ", ["ren"] = "ㄖㄣ",
        ["rao"] = "ㄖㄠ", ["ran"] = "ㄖㄢ", ["pou"] = "ㄆㄡ",
        ["pin"] = "ㄆㄧㄣ", ["pia"] = "ㄆㄧㄚ", ["pen"] = "ㄆㄣ",
        ["pei"] = "ㄆㄟ", ["pao"] = "ㄆㄠ", ["pan"] = "ㄆㄢ",
        ["pai"] = "ㄆㄞ", ["nyu"] = "ㄋㄩ", ["nuo"] = "ㄋㄨㄛ",
        ["nun"] = "ㄋㄨㄣ", ["nou"] = "ㄋㄡ", ["nin"] = "ㄋㄧㄣ",
        ["nen"] = "ㄋㄣ", ["nei"] = "ㄋㄟ", ["nao"] = "ㄋㄠ",
        ["nan"] = "ㄋㄢ", ["nai"] = "ㄋㄞ", ["mou"] = "ㄇㄡ",
        ["min"] = "ㄇㄧㄣ", ["men"] = "ㄇㄣ", ["mei"] = "ㄇㄟ",
        ["mao"] = "ㄇㄠ", ["man"] = "ㄇㄢ", ["mai"] = "ㄇㄞ",
        ["lyu"] = "ㄌㄩ", ["luo"] = "ㄌㄨㄛ", ["lun"] = "ㄌㄨㄣ",
        ["lou"] = "ㄌㄡ", ["lin"] = "ㄌㄧㄣ", ["lia"] = "ㄌㄧㄚ",
        ["lei"] = "ㄌㄟ", ["lao"] = "ㄌㄠ", ["lan"] = "ㄌㄢ",
        ["lai"] = "ㄌㄞ", ["kuo"] = "ㄎㄨㄛ", ["kun"] = "ㄎㄨㄣ",
        ["kua"] = "ㄎㄨㄚ", ["kou"] = "ㄎㄡ", ["ken"] = "ㄎㄣ",
        ["kao"] = "ㄎㄠ", ["kan"] = "ㄎㄢ", ["kai"] = "ㄎㄞ",
        ["jyu"] = "ㄐㄩ", ["jin"] = "ㄐㄧㄣ", ["jia"] = "ㄐㄧㄚ",
        ["jhu"] = "ㄓㄨ", ["jhe"] = "ㄓㄜ", ["jha"] = "ㄓㄚ",
        ["huo"] = "ㄏㄨㄛ", ["hun"] = "ㄏㄨㄣ", ["hua"] = "ㄏㄨㄚ",
        ["hou"] = "ㄏㄡ", ["hen"] = "ㄏㄣ", ["hei"] = "ㄏㄟ",
        ["hao"] = "ㄏㄠ", ["han"] = "ㄏㄢ", ["hai"] = "ㄏㄞ",
        ["guo"] = "ㄍㄨㄛ", ["gun"] = "ㄍㄨㄣ", ["gue"] = "ㄍㄨㄜ",
        ["gua"] = "ㄍㄨㄚ", ["gou"] = "ㄍㄡ", ["gen"] = "ㄍㄣ",
        ["gei"] = "ㄍㄟ", ["gao"] = "ㄍㄠ", ["gan"] = "ㄍㄢ",
        ["gai"] = "ㄍㄞ", ["fou"] = "ㄈㄡ", ["fen"] = "ㄈㄣ",
        ["fei"] = "ㄈㄟ", ["fan"] = "ㄈㄢ", ["eng"] = "ㄥ",
        ["duo"] = "ㄉㄨㄛ", ["dun"] = "ㄉㄨㄣ", ["dou"] = "ㄉㄡ",
        ["dia"] = "ㄉㄧㄚ", ["dei"] = "ㄉㄟ", ["dao"] = "ㄉㄠ",
        ["dan"] = "ㄉㄢ", ["dai"] = "ㄉㄞ", ["tsu"] = "ㄘㄨ",
        ["chi"] = "ㄑㄧ", ["chu"] = "ㄔㄨ", ["che"] = "ㄔㄜ",
        ["cha"] = "ㄔㄚ", ["tse"] = "ㄘㄜ", ["tsa"] = "ㄘㄚ",
        ["bin"] = "ㄅㄧㄣ", ["ben"] = "ㄅㄣ", ["bei"] = "ㄅㄟ",
        ["bao"] = "ㄅㄠ", ["ban"] = "ㄅㄢ", ["bai"] = "ㄅㄞ",
        ["ang"] = "ㄤ", ["ch"] = "ㄑ", ["zu"] = "ㄗㄨ",
        ["ze"] = "ㄗㄜ", ["za"] = "ㄗㄚ", ["yu"] = "ㄩ",
        ["yo"] = "ㄧㄛ", ["ya"] = "ㄧㄚ", ["yi"] = "ㄧ",
        ["wu"] = "ㄨ", ["wo"] = "ㄨㄛ", ["wa"] = "ㄨㄚ",
        ["tu"] = "ㄊㄨ", ["ti"] = "ㄊㄧ", ["te"] = "ㄊㄜ",
        ["ta"] = "ㄊㄚ", ["su"] = "ㄙㄨ", ["si"] = "ㄒㄧ",
        ["se"] = "ㄙㄜ", ["sa"] = "ㄙㄚ", ["ru"] = "ㄖㄨ",
        ["re"] = "ㄖㄜ", ["pu"] = "ㄆㄨ", ["po"] = "ㄆㄛ",
        ["pi"] = "ㄆㄧ", ["pa"] = "ㄆㄚ", ["ou"] = "ㄡ",
        ["nu"] = "ㄋㄨ", ["ni"] = "ㄋㄧ", ["ne"] = "ㄋㄜ",
        ["na"] = "ㄋㄚ", ["mu"] = "ㄇㄨ", ["mo"] = "ㄇㄛ",
        ["mi"] = "ㄇㄧ", ["me"] = "ㄇㄜ", ["ma"] = "ㄇㄚ",
        ["lu"] = "ㄌㄨ", ["lo"] = "ㄌㄛ", ["li"] = "ㄌㄧ",
        ["le"] = "ㄌㄜ", ["la"] = "ㄌㄚ", ["ku"] = "ㄎㄨ",
        ["ke"] = "ㄎㄜ", ["ka"] = "ㄎㄚ", ["ji"] = "ㄐㄧ",
        ["hu"] = "ㄏㄨ", ["he"] = "ㄏㄜ", ["ha"] = "ㄏㄚ",
        ["gu"] = "ㄍㄨ", ["ge"] = "ㄍㄜ", ["ga"] = "ㄍㄚ",
        ["fu"] = "ㄈㄨ", ["fo"] = "ㄈㄛ", ["fa"] = "ㄈㄚ",
        ["er"] = "ㄦ", ["en"] = "ㄣ", ["ei"] = "ㄟ",
        ["eh"] = "ㄝ", ["du"] = "ㄉㄨ", ["di"] = "ㄉㄧ",
        ["de"] = "ㄉㄜ", ["da"] = "ㄉㄚ", ["bu"] = "ㄅㄨ",
        ["bo"] = "ㄅㄛ", ["bi"] = "ㄅㄧ", ["ba"] = "ㄅㄚ",
        ["ao"] = "ㄠ", ["an"] = "ㄢ", ["ai"] = "ㄞ",
        ["o"] = "ㄛ", ["e"] = "ㄜ", ["a"] = "ㄚ"
      };

    /// <summary>
    /// 通用拼音排列專用處理陣列
    /// </summary>
    public static readonly Dictionary<string, string> MapUniversalPinyin =
      new Dictionary<string, string> {
        ["shuang"] = "ㄕㄨㄤ", ["jhuang"] = "ㄓㄨㄤ", ["chuang"] = "ㄔㄨㄤ",
        ["biang"] = "ㄅㄧㄤ", ["duang"] = "ㄉㄨㄤ", ["cyuan"] = "ㄑㄩㄢ",
        ["cyong"] = "ㄑㄩㄥ", ["ciang"] = "ㄑㄧㄤ", ["kyang"] = "ㄎㄧㄤ",
        ["syuan"] = "ㄒㄩㄢ", ["syong"] = "ㄒㄩㄥ", ["sihei"] = "ㄙㄟ",
        ["siang"] = "ㄒㄧㄤ", ["shuei"] = "ㄕㄨㄟ", ["shuan"] = "ㄕㄨㄢ",
        ["shuai"] = "ㄕㄨㄞ", ["sheng"] = "ㄕㄥ", ["shang"] = "ㄕㄤ",
        ["niang"] = "ㄋㄧㄤ", ["lyuan"] = "ㄌㄩㄢ", ["liang"] = "ㄌㄧㄤ",
        ["kuang"] = "ㄎㄨㄤ", ["jyuan"] = "ㄐㄩㄢ", ["jyong"] = "ㄐㄩㄥ",
        ["jiang"] = "ㄐㄧㄤ", ["jhuei"] = "ㄓㄨㄟ", ["jhuan"] = "ㄓㄨㄢ",
        ["jhuai"] = "ㄓㄨㄞ", ["jhong"] = "ㄓㄨㄥ", ["jheng"] = "ㄓㄥ",
        ["jhang"] = "ㄓㄤ", ["huang"] = "ㄏㄨㄤ", ["guang"] = "ㄍㄨㄤ",
        ["chuei"] = "ㄔㄨㄟ", ["chuan"] = "ㄔㄨㄢ", ["chuai"] = "ㄔㄨㄞ",
        ["chong"] = "ㄔㄨㄥ", ["cheng"] = "ㄔㄥ", ["chang"] = "ㄔㄤ",
        ["cyue"] = "ㄑㄩㄝ", ["syue"] = "ㄒㄩㄝ", ["nyue"] = "ㄋㄩㄝ",
        ["lyue"] = "ㄌㄩㄝ", ["jyue"] = "ㄐㄩㄝ", ["cyun"] = "ㄑㄩㄣ",
        ["cuei"] = "ㄘㄨㄟ", ["cuan"] = "ㄘㄨㄢ", ["cong"] = "ㄘㄨㄥ",
        ["ciou"] = "ㄑㄧㄡ", ["cing"] = "ㄑㄧㄥ", ["ciao"] = "ㄑㄧㄠ",
        ["cian"] = "ㄑㄧㄢ", ["ceng"] = "ㄘㄥ", ["cang"] = "ㄘㄤ",
        ["gyao"] = "ㄍㄧㄠ", ["fiao"] = "ㄈㄧㄠ", ["zuei"] = "ㄗㄨㄟ",
        ["zuan"] = "ㄗㄨㄢ", ["zong"] = "ㄗㄨㄥ", ["zeng"] = "ㄗㄥ",
        ["zang"] = "ㄗㄤ", ["yuan"] = "ㄩㄢ", ["yong"] = "ㄩㄥ",
        ["ying"] = "ㄧㄥ", ["yang"] = "ㄧㄤ", ["wong"] = "ㄨㄥ",
        ["wang"] = "ㄨㄤ", ["tuei"] = "ㄊㄨㄟ", ["tuan"] = "ㄊㄨㄢ",
        ["tong"] = "ㄊㄨㄥ", ["ting"] = "ㄊㄧㄥ", ["tiao"] = "ㄊㄧㄠ",
        ["tian"] = "ㄊㄧㄢ", ["teng"] = "ㄊㄥ", ["tang"] = "ㄊㄤ",
        ["syun"] = "ㄒㄩㄣ", ["suei"] = "ㄙㄨㄟ", ["suan"] = "ㄙㄨㄢ",
        ["song"] = "ㄙㄨㄥ", ["siou"] = "ㄒㄧㄡ", ["sing"] = "ㄒㄧㄥ",
        ["siao"] = "ㄒㄧㄠ", ["sian"] = "ㄒㄧㄢ", ["shuo"] = "ㄕㄨㄛ",
        ["shun"] = "ㄕㄨㄣ", ["shua"] = "ㄕㄨㄚ", ["shou"] = "ㄕㄡ",
        ["shih"] = "ㄕ", ["shen"] = "ㄕㄣ", ["shei"] = "ㄕㄟ",
        ["shao"] = "ㄕㄠ", ["shan"] = "ㄕㄢ", ["shai"] = "ㄕㄞ",
        ["seng"] = "ㄙㄥ", ["sang"] = "ㄙㄤ", ["ruei"] = "ㄖㄨㄟ",
        ["ruan"] = "ㄖㄨㄢ", ["rong"] = "ㄖㄨㄥ", ["reng"] = "ㄖㄥ",
        ["rang"] = "ㄖㄤ", ["ping"] = "ㄆㄧㄥ", ["piao"] = "ㄆㄧㄠ",
        ["pian"] = "ㄆㄧㄢ", ["peng"] = "ㄆㄥ", ["pang"] = "ㄆㄤ",
        ["nuei"] = "ㄋㄨㄟ", ["nuan"] = "ㄋㄨㄢ", ["nong"] = "ㄋㄨㄥ",
        ["niou"] = "ㄋㄧㄡ", ["ning"] = "ㄋㄧㄥ", ["niao"] = "ㄋㄧㄠ",
        ["nian"] = "ㄋㄧㄢ", ["neng"] = "ㄋㄥ", ["nang"] = "ㄋㄤ",
        ["miou"] = "ㄇㄧㄡ", ["ming"] = "ㄇㄧㄥ", ["miao"] = "ㄇㄧㄠ",
        ["mian"] = "ㄇㄧㄢ", ["meng"] = "ㄇㄥ", ["mang"] = "ㄇㄤ",
        ["luan"] = "ㄌㄨㄢ", ["long"] = "ㄌㄨㄥ", ["liou"] = "ㄌㄧㄡ",
        ["ling"] = "ㄌㄧㄥ", ["liao"] = "ㄌㄧㄠ", ["lian"] = "ㄌㄧㄢ",
        ["leng"] = "ㄌㄥ", ["lang"] = "ㄌㄤ", ["kuei"] = "ㄎㄨㄟ",
        ["kuan"] = "ㄎㄨㄢ", ["kuai"] = "ㄎㄨㄞ", ["kong"] = "ㄎㄨㄥ",
        ["keng"] = "ㄎㄥ", ["kang"] = "ㄎㄤ", ["jyun"] = "ㄐㄩㄣ",
        ["jiou"] = "ㄐㄧㄡ", ["jing"] = "ㄐㄧㄥ", ["jiao"] = "ㄐㄧㄠ",
        ["jian"] = "ㄐㄧㄢ", ["jhuo"] = "ㄓㄨㄛ", ["jhun"] = "ㄓㄨㄣ",
        ["jhua"] = "ㄓㄨㄚ", ["jhou"] = "ㄓㄡ", ["jhih"] = "ㄓ",
        ["jhen"] = "ㄓㄣ", ["jhei"] = "ㄓㄟ", ["jhao"] = "ㄓㄠ",
        ["jhan"] = "ㄓㄢ", ["jhai"] = "ㄓㄞ", ["huei"] = "ㄏㄨㄟ",
        ["huan"] = "ㄏㄨㄢ", ["huai"] = "ㄏㄨㄞ", ["hong"] = "ㄏㄨㄥ",
        ["heng"] = "ㄏㄥ", ["hang"] = "ㄏㄤ", ["guei"] = "ㄍㄨㄟ",
        ["guan"] = "ㄍㄨㄢ", ["guai"] = "ㄍㄨㄞ", ["gong"] = "ㄍㄨㄥ",
        ["geng"] = "ㄍㄥ", ["gang"] = "ㄍㄤ", ["fong"] = "ㄈㄥ",
        ["fang"] = "ㄈㄤ", ["duei"] = "ㄉㄨㄟ", ["duan"] = "ㄉㄨㄢ",
        ["dong"] = "ㄉㄨㄥ", ["diou"] = "ㄉㄧㄡ", ["ding"] = "ㄉㄧㄥ",
        ["diao"] = "ㄉㄧㄠ", ["dian"] = "ㄉㄧㄢ", ["deng"] = "ㄉㄥ",
        ["dang"] = "ㄉㄤ", ["chuo"] = "ㄔㄨㄛ", ["chun"] = "ㄔㄨㄣ",
        ["chua"] = "ㄔㄨㄚ", ["chou"] = "ㄔㄡ", ["chih"] = "ㄔ",
        ["chen"] = "ㄔㄣ", ["chao"] = "ㄔㄠ", ["chan"] = "ㄔㄢ",
        ["chai"] = "ㄔㄞ", ["bing"] = "ㄅㄧㄥ", ["biao"] = "ㄅㄧㄠ",
        ["bian"] = "ㄅㄧㄢ", ["beng"] = "ㄅㄥ", ["bang"] = "ㄅㄤ",
        ["cie"] = "ㄑㄧㄝ", ["yue"] = "ㄩㄝ", ["tie"] = "ㄊㄧㄝ",
        ["sie"] = "ㄒㄧㄝ", ["pie"] = "ㄆㄧㄝ", ["nie"] = "ㄋㄧㄝ",
        ["mie"] = "ㄇㄧㄝ", ["lie"] = "ㄌㄧㄝ", ["jie"] = "ㄐㄧㄝ",
        ["die"] = "ㄉㄧㄝ", ["cyu"] = "ㄑㄩ", ["cuo"] = "ㄘㄨㄛ",
        ["cun"] = "ㄘㄨㄣ", ["cou"] = "ㄘㄡ", ["cin"] = "ㄑㄧㄣ",
        ["cih"] = "ㄘ", ["cia"] = "ㄑㄧㄚ", ["cen"] = "ㄘㄣ",
        ["cao"] = "ㄘㄠ", ["can"] = "ㄘㄢ", ["cai"] = "ㄘㄞ",
        ["bie"] = "ㄅㄧㄝ", ["gin"] = "ㄍㄧㄣ", ["den"] = "ㄉㄣ",
        ["zuo"] = "ㄗㄨㄛ", ["zun"] = "ㄗㄨㄣ", ["zou"] = "ㄗㄡ",
        ["zih"] = "ㄗ", ["zen"] = "ㄗㄣ", ["zei"] = "ㄗㄟ",
        ["zao"] = "ㄗㄠ", ["zan"] = "ㄗㄢ", ["zai"] = "ㄗㄞ",
        ["yun"] = "ㄩㄣ", ["you"] = "ㄧㄡ", ["yin"] = "ㄧㄣ",
        ["yao"] = "ㄧㄠ", ["yan"] = "ㄧㄢ", ["yai"] = "ㄧㄞ",
        ["wun"] = "ㄨㄣ", ["wei"] = "ㄨㄟ", ["wan"] = "ㄨㄢ",
        ["wai"] = "ㄨㄞ", ["tuo"] = "ㄊㄨㄛ", ["tun"] = "ㄊㄨㄣ",
        ["tou"] = "ㄊㄡ", ["tao"] = "ㄊㄠ", ["tan"] = "ㄊㄢ",
        ["tai"] = "ㄊㄞ", ["syu"] = "ㄒㄩ", ["suo"] = "ㄙㄨㄛ",
        ["sun"] = "ㄙㄨㄣ", ["sou"] = "ㄙㄡ", ["sin"] = "ㄒㄧㄣ",
        ["sih"] = "ㄙ", ["sia"] = "ㄒㄧㄚ", ["shu"] = "ㄕㄨ",
        ["she"] = "ㄕㄜ", ["sha"] = "ㄕㄚ", ["sen"] = "ㄙㄣ",
        ["sao"] = "ㄙㄠ", ["san"] = "ㄙㄢ", ["sai"] = "ㄙㄞ",
        ["ruo"] = "ㄖㄨㄛ", ["run"] = "ㄖㄨㄣ", ["rou"] = "ㄖㄡ",
        ["rih"] = "ㄖ", ["ren"] = "ㄖㄣ", ["rao"] = "ㄖㄠ",
        ["ran"] = "ㄖㄢ", ["pou"] = "ㄆㄡ", ["pin"] = "ㄆㄧㄣ",
        ["pia"] = "ㄆㄧㄚ", ["pen"] = "ㄆㄣ", ["pei"] = "ㄆㄟ",
        ["pao"] = "ㄆㄠ", ["pan"] = "ㄆㄢ", ["pai"] = "ㄆㄞ",
        ["nyu"] = "ㄋㄩ", ["nuo"] = "ㄋㄨㄛ", ["nun"] = "ㄋㄨㄣ",
        ["nou"] = "ㄋㄡ", ["nin"] = "ㄋㄧㄣ", ["nen"] = "ㄋㄣ",
        ["nei"] = "ㄋㄟ", ["nao"] = "ㄋㄠ", ["nan"] = "ㄋㄢ",
        ["nai"] = "ㄋㄞ", ["mou"] = "ㄇㄡ", ["min"] = "ㄇㄧㄣ",
        ["men"] = "ㄇㄣ", ["mei"] = "ㄇㄟ", ["mao"] = "ㄇㄠ",
        ["man"] = "ㄇㄢ", ["mai"] = "ㄇㄞ", ["lyu"] = "ㄌㄩ",
        ["luo"] = "ㄌㄨㄛ", ["lun"] = "ㄌㄨㄣ", ["lou"] = "ㄌㄡ",
        ["lin"] = "ㄌㄧㄣ", ["lia"] = "ㄌㄧㄚ", ["lei"] = "ㄌㄟ",
        ["lao"] = "ㄌㄠ", ["lan"] = "ㄌㄢ", ["lai"] = "ㄌㄞ",
        ["kuo"] = "ㄎㄨㄛ", ["kun"] = "ㄎㄨㄣ", ["kua"] = "ㄎㄨㄚ",
        ["kou"] = "ㄎㄡ", ["ken"] = "ㄎㄣ", ["kao"] = "ㄎㄠ",
        ["kan"] = "ㄎㄢ", ["kai"] = "ㄎㄞ", ["jyu"] = "ㄐㄩ",
        ["jin"] = "ㄐㄧㄣ", ["jia"] = "ㄐㄧㄚ", ["jhu"] = "ㄓㄨ",
        ["jhe"] = "ㄓㄜ", ["jha"] = "ㄓㄚ", ["huo"] = "ㄏㄨㄛ",
        ["hun"] = "ㄏㄨㄣ", ["hua"] = "ㄏㄨㄚ", ["hou"] = "ㄏㄡ",
        ["hen"] = "ㄏㄣ", ["hei"] = "ㄏㄟ", ["hao"] = "ㄏㄠ",
        ["han"] = "ㄏㄢ", ["hai"] = "ㄏㄞ", ["guo"] = "ㄍㄨㄛ",
        ["gun"] = "ㄍㄨㄣ", ["gue"] = "ㄍㄨㄜ", ["gua"] = "ㄍㄨㄚ",
        ["gou"] = "ㄍㄡ", ["gen"] = "ㄍㄣ", ["gei"] = "ㄍㄟ",
        ["gao"] = "ㄍㄠ", ["gan"] = "ㄍㄢ", ["gai"] = "ㄍㄞ",
        ["fou"] = "ㄈㄡ", ["fen"] = "ㄈㄣ", ["fei"] = "ㄈㄟ",
        ["fan"] = "ㄈㄢ", ["eng"] = "ㄥ", ["duo"] = "ㄉㄨㄛ",
        ["dun"] = "ㄉㄨㄣ", ["dou"] = "ㄉㄡ", ["dia"] = "ㄉㄧㄚ",
        ["dei"] = "ㄉㄟ", ["dao"] = "ㄉㄠ", ["dan"] = "ㄉㄢ",
        ["dai"] = "ㄉㄞ", ["chu"] = "ㄔㄨ", ["che"] = "ㄔㄜ",
        ["cha"] = "ㄔㄚ", ["bin"] = "ㄅㄧㄣ", ["ben"] = "ㄅㄣ",
        ["bei"] = "ㄅㄟ", ["bao"] = "ㄅㄠ", ["ban"] = "ㄅㄢ",
        ["bai"] = "ㄅㄞ", ["ang"] = "ㄤ", ["yia"] = "ㄧㄚ",
        ["ye"] = "ㄧㄝ", ["cu"] = "ㄘㄨ", ["ci"] = "ㄑㄧ",
        ["ce"] = "ㄘㄜ", ["ca"] = "ㄘㄚ", ["zu"] = "ㄗㄨ",
        ["ze"] = "ㄗㄜ", ["za"] = "ㄗㄚ", ["yu"] = "ㄩ",
        ["yo"] = "ㄧㄛ", ["yi"] = "ㄧ", ["wu"] = "ㄨ",
        ["wo"] = "ㄨㄛ", ["wa"] = "ㄨㄚ", ["tu"] = "ㄊㄨ",
        ["ti"] = "ㄊㄧ", ["te"] = "ㄊㄜ", ["ta"] = "ㄊㄚ",
        ["su"] = "ㄙㄨ", ["si"] = "ㄒㄧ", ["se"] = "ㄙㄜ",
        ["sa"] = "ㄙㄚ", ["ru"] = "ㄖㄨ", ["re"] = "ㄖㄜ",
        ["pu"] = "ㄆㄨ", ["po"] = "ㄆㄛ", ["pi"] = "ㄆㄧ",
        ["pa"] = "ㄆㄚ", ["ou"] = "ㄡ", ["nu"] = "ㄋㄨ",
        ["ni"] = "ㄋㄧ", ["ne"] = "ㄋㄜ", ["na"] = "ㄋㄚ",
        ["mu"] = "ㄇㄨ", ["mo"] = "ㄇㄛ", ["mi"] = "ㄇㄧ",
        ["me"] = "ㄇㄜ", ["ma"] = "ㄇㄚ", ["lu"] = "ㄌㄨ",
        ["lo"] = "ㄌㄛ", ["li"] = "ㄌㄧ", ["le"] = "ㄌㄜ",
        ["la"] = "ㄌㄚ", ["ku"] = "ㄎㄨ", ["ke"] = "ㄎㄜ",
        ["ka"] = "ㄎㄚ", ["ji"] = "ㄐㄧ", ["hu"] = "ㄏㄨ",
        ["he"] = "ㄏㄜ", ["ha"] = "ㄏㄚ", ["gu"] = "ㄍㄨ",
        ["ge"] = "ㄍㄜ", ["ga"] = "ㄍㄚ", ["fu"] = "ㄈㄨ",
        ["fo"] = "ㄈㄛ", ["fa"] = "ㄈㄚ", ["er"] = "ㄦ",
        ["en"] = "ㄣ", ["ei"] = "ㄟ", ["eh"] = "ㄝ",
        ["du"] = "ㄉㄨ", ["di"] = "ㄉㄧ", ["de"] = "ㄉㄜ",
        ["da"] = "ㄉㄚ", ["bu"] = "ㄅㄨ", ["bo"] = "ㄅㄛ",
        ["bi"] = "ㄅㄧ", ["ba"] = "ㄅㄚ", ["ao"] = "ㄠ",
        ["an"] = "ㄢ", ["ai"] = "ㄞ", ["c"] = "ㄑ",
        ["o"] = "ㄛ", ["e"] = "ㄜ", ["a"] = "ㄚ"
      };

    /// <summary>
    /// 韋氏拼音排列專用處理陣列
    /// </summary>
    public static readonly Dictionary<string, string> MapWadeGilesPinyin =
      new Dictionary<string, string> {
        ["a"] = "ㄚ", ["ai"] = "ㄞ", ["an"] = "ㄢ",
        ["ang"] = "ㄤ", ["ao"] = "ㄠ", ["cha"] = "ㄓㄚ",
        ["chai"] = "ㄓㄞ", ["chan"] = "ㄓㄢ", ["chang"] = "ㄓㄤ",
        ["chao"] = "ㄓㄠ", ["che"] = "ㄓㄜ", ["chei"] = "ㄓㄟ",
        ["chen"] = "ㄓㄣ", ["cheng"] = "ㄓㄥ", ["chi"] = "ㄐㄧ",
        ["chia"] = "ㄐㄧㄚ", ["chiang"] = "ㄐㄧㄤ", ["chiao"] = "ㄐㄧㄠ",
        ["chieh"] = "ㄐㄧㄝ", ["chien"] = "ㄐㄧㄢ", ["chih"] = "ㄓ",
        ["chin"] = "ㄐㄧㄣ", ["ching"] = "ㄐㄧㄥ", ["chiu"] = "ㄐㄧㄡ",
        ["chiung"] = "ㄐㄩㄥ", ["cho"] = "ㄓㄨㄛ", ["chou"] = "ㄓㄡ",
        ["chu"] = "ㄓㄨ", ["chua"] = "ㄓㄨㄚ", ["chuai"] = "ㄓㄨㄞ",
        ["chuan"] = "ㄓㄨㄢ", ["chuang"] = "ㄓㄨㄤ", ["chui"] = "ㄓㄨㄟ",
        ["chun"] = "ㄓㄨㄣ", ["chung"] = "ㄓㄨㄥ", ["ch'a"] = "ㄔㄚ",
        ["ch'ai"] = "ㄔㄞ", ["ch'an"] = "ㄔㄢ", ["ch'ang"] = "ㄔㄤ",
        ["ch'ao"] = "ㄔㄠ", ["ch'e"] = "ㄔㄜ", ["ch'en"] = "ㄔㄣ",
        ["ch'eng"] = "ㄔㄥ", ["ch'i"] = "ㄑㄧ", ["ch'ia"] = "ㄑㄧㄚ",
        ["ch'iang"] = "ㄑㄧㄤ", ["ch'iao"] = "ㄑㄧㄠ", ["ch'ieh"] = "ㄑㄧㄝ",
        ["ch'ien"] = "ㄑㄧㄢ", ["ch'ih"] = "ㄔ", ["ch'in"] = "ㄑㄧㄣ",
        ["ch'ing"] = "ㄑㄧㄥ", ["ch'iu"] = "ㄑㄧㄡ", ["ch'iung"] = "ㄑㄩㄥ",
        ["ch'o"] = "ㄔㄨㄛ", ["ch'ou"] = "ㄔㄡ", ["ch'u"] = "ㄔㄨ",
        ["ch'ua"] = "ㄔㄨㄚ", ["ch'uai"] = "ㄔㄨㄞ", ["ch'uan"] = "ㄔㄨㄢ",
        ["ch'uang"] = "ㄔㄨㄤ", ["ch'ui"] = "ㄔㄨㄟ", ["ch'un"] = "ㄔㄨㄣ",
        ["ch'ung"] = "ㄔㄨㄥ", ["ch'v"] = "ㄑㄩ", ["ch'van"] = "ㄑㄩㄢ",
        ["ch'veh"] = "ㄑㄩㄝ", ["ch'vn"] = "ㄑㄩㄣ", ["chv"] = "ㄐㄩ",
        ["chvan"] = "ㄐㄩㄢ", ["chveh"] = "ㄐㄩㄝ", ["chvn"] = "ㄐㄩㄣ",
        ["e"] = "ㄜ", ["ei"] = "ㄟ", ["en"] = "ㄣ",
        ["erh"] = "ㄦ", ["fa"] = "ㄈㄚ", ["fan"] = "ㄈㄢ",
        ["fang"] = "ㄈㄤ", ["fei"] = "ㄈㄟ", ["fen"] = "ㄈㄣ",
        ["feng"] = "ㄈㄥ", ["fo"] = "ㄈㄛ", ["fou"] = "ㄈㄡ",
        ["fu"] = "ㄈㄨ", ["ha"] = "ㄏㄚ", ["hai"] = "ㄏㄞ",
        ["han"] = "ㄏㄢ", ["hang"] = "ㄏㄤ", ["hao"] = "ㄏㄠ",
        ["hei"] = "ㄏㄟ", ["hen"] = "ㄏㄣ", ["heng"] = "ㄏㄥ",
        ["ho"] = "ㄏㄜ", ["hou"] = "ㄏㄡ", ["hsi"] = "ㄒㄧ",
        ["hsia"] = "ㄒㄧㄚ", ["hsiang"] = "ㄒㄧㄤ", ["hsiao"] = "ㄒㄧㄠ",
        ["hsieh"] = "ㄒㄧㄝ", ["hsien"] = "ㄒㄧㄢ", ["hsin"] = "ㄒㄧㄣ",
        ["hsing"] = "ㄒㄧㄥ", ["hsiu"] = "ㄒㄧㄡ", ["hsiung"] = "ㄒㄩㄥ",
        ["hsv"] = "ㄒㄩ", ["hsvan"] = "ㄒㄩㄢ", ["hsveh"] = "ㄒㄩㄝ",
        ["hsvn"] = "ㄒㄩㄣ", ["hu"] = "ㄏㄨ", ["hua"] = "ㄏㄨㄚ",
        ["huai"] = "ㄏㄨㄞ", ["huan"] = "ㄏㄨㄢ", ["huang"] = "ㄏㄨㄤ",
        ["hui"] = "ㄏㄨㄟ", ["hun"] = "ㄏㄨㄣ", ["hung"] = "ㄏㄨㄥ",
        ["huo"] = "ㄏㄨㄛ", ["i"] = "ㄧ", ["jan"] = "ㄖㄢ",
        ["jang"] = "ㄖㄤ", ["jao"] = "ㄖㄠ", ["je"] = "ㄖㄜ",
        ["jen"] = "ㄖㄣ", ["jeng"] = "ㄖㄥ", ["jih"] = "ㄖ",
        ["jo"] = "ㄖㄨㄛ", ["jou"] = "ㄖㄡ", ["ju"] = "ㄖㄨ",
        ["juan"] = "ㄖㄨㄢ", ["jui"] = "ㄖㄨㄟ", ["jun"] = "ㄖㄨㄣ",
        ["jung"] = "ㄖㄨㄥ", ["ka"] = "ㄍㄚ", ["kai"] = "ㄍㄞ",
        ["kan"] = "ㄍㄢ", ["kang"] = "ㄍㄤ", ["kao"] = "ㄍㄠ",
        ["kei"] = "ㄍㄟ", ["ken"] = "ㄍㄣ", ["keng"] = "ㄍㄥ",
        ["ko"] = "ㄍㄜ", ["kou"] = "ㄍㄡ", ["ku"] = "ㄍㄨ",
        ["kua"] = "ㄍㄨㄚ", ["kuai"] = "ㄍㄨㄞ", ["kuan"] = "ㄍㄨㄢ",
        ["kuang"] = "ㄍㄨㄤ", ["kuei"] = "ㄍㄨㄟ", ["kun"] = "ㄍㄨㄣ",
        ["kung"] = "ㄍㄨㄥ", ["kuo"] = "ㄍㄨㄛ", ["k'a"] = "ㄎㄚ",
        ["k'ai"] = "ㄎㄞ", ["k'an"] = "ㄎㄢ", ["k'ang"] = "ㄎㄤ",
        ["k'ao"] = "ㄎㄠ", ["k'en"] = "ㄎㄣ", ["k'eng"] = "ㄎㄥ",
        ["k'o"] = "ㄎㄜ", ["k'ou"] = "ㄎㄡ", ["k'u"] = "ㄎㄨ",
        ["k'ua"] = "ㄎㄨㄚ", ["k'uai"] = "ㄎㄨㄞ", ["k'uan"] = "ㄎㄨㄢ",
        ["k'uang"] = "ㄎㄨㄤ", ["k'uei"] = "ㄎㄨㄟ", ["k'un"] = "ㄎㄨㄣ",
        ["k'ung"] = "ㄎㄨㄥ", ["k'uo"] = "ㄎㄨㄛ", ["la"] = "ㄌㄚ",
        ["lai"] = "ㄌㄞ", ["lan"] = "ㄌㄢ", ["lang"] = "ㄌㄤ",
        ["lao"] = "ㄌㄠ", ["le"] = "ㄌㄜ", ["lei"] = "ㄌㄟ",
        ["leng"] = "ㄌㄥ", ["li"] = "ㄌㄧ", ["lia"] = "ㄌㄧㄚ",
        ["liang"] = "ㄌㄧㄤ", ["liao"] = "ㄌㄧㄠ", ["lieh"] = "ㄌㄧㄝ",
        ["lien"] = "ㄌㄧㄢ", ["lin"] = "ㄌㄧㄣ", ["ling"] = "ㄌㄧㄥ",
        ["liu"] = "ㄌㄧㄡ", ["lo"] = "ㄌㄨㄛ", ["lou"] = "ㄌㄡ",
        ["lu"] = "ㄌㄨ", ["luan"] = "ㄌㄨㄢ", ["lun"] = "ㄌㄨㄣ",
        ["lung"] = "ㄌㄨㄥ", ["lv"] = "ㄌㄩ", ["lveh"] = "ㄌㄩㄝ",
        ["lvn"] = "ㄌㄩㄣ", ["ma"] = "ㄇㄚ", ["mai"] = "ㄇㄞ",
        ["man"] = "ㄇㄢ", ["mang"] = "ㄇㄤ", ["mao"] = "ㄇㄠ",
        ["me"] = "ㄇㄜ", ["mei"] = "ㄇㄟ", ["men"] = "ㄇㄣ",
        ["meng"] = "ㄇㄥ", ["mi"] = "ㄇㄧ", ["miao"] = "ㄇㄧㄠ",
        ["mieh"] = "ㄇㄧㄝ", ["mien"] = "ㄇㄧㄢ", ["min"] = "ㄇㄧㄣ",
        ["ming"] = "ㄇㄧㄥ", ["miu"] = "ㄇㄧㄡ", ["mo"] = "ㄇㄛ",
        ["mou"] = "ㄇㄡ", ["mu"] = "ㄇㄨ", ["na"] = "ㄋㄚ",
        ["nai"] = "ㄋㄞ", ["nan"] = "ㄋㄢ", ["nang"] = "ㄋㄤ",
        ["nao"] = "ㄋㄠ", ["ne"] = "ㄋㄜ", ["nei"] = "ㄋㄟ",
        ["nen"] = "ㄋㄣ", ["neng"] = "ㄋㄥ", ["ni"] = "ㄋㄧ",
        ["nia"] = "ㄋㄧㄚ", ["niang"] = "ㄋㄧㄤ", ["niao"] = "ㄋㄧㄠ",
        ["nieh"] = "ㄋㄧㄝ", ["nien"] = "ㄋㄧㄢ", ["nin"] = "ㄋㄧㄣ",
        ["ning"] = "ㄋㄧㄥ", ["niu"] = "ㄋㄧㄡ", ["no"] = "ㄋㄨㄛ",
        ["nou"] = "ㄋㄡ", ["nu"] = "ㄋㄨ", ["nuan"] = "ㄋㄨㄢ",
        ["nun"] = "ㄋㄨㄣ", ["nung"] = "ㄋㄨㄥ", ["nv"] = "ㄋㄩ",
        ["nveh"] = "ㄋㄩㄝ", ["ou"] = "ㄡ", ["pa"] = "ㄅㄚ",
        ["pai"] = "ㄅㄞ", ["pan"] = "ㄅㄢ", ["pang"] = "ㄅㄤ",
        ["pao"] = "ㄅㄠ", ["pei"] = "ㄅㄟ", ["pen"] = "ㄅㄣ",
        ["peng"] = "ㄅㄥ", ["pi"] = "ㄅㄧ", ["piao"] = "ㄅㄧㄠ",
        ["pieh"] = "ㄅㄧㄝ", ["pien"] = "ㄅㄧㄢ", ["pin"] = "ㄅㄧㄣ",
        ["ping"] = "ㄅㄧㄥ", ["po"] = "ㄅㄛ", ["pu"] = "ㄅㄨ",
        ["p'a"] = "ㄆㄚ", ["p'ai"] = "ㄆㄞ", ["p'an"] = "ㄆㄢ",
        ["p'ang"] = "ㄆㄤ", ["p'ao"] = "ㄆㄠ", ["p'ei"] = "ㄆㄟ",
        ["p'en"] = "ㄆㄣ", ["p'eng"] = "ㄆㄥ", ["p'i"] = "ㄆㄧ",
        ["p'iao"] = "ㄆㄧㄠ", ["p'ieh"] = "ㄆㄧㄝ", ["p'ien"] = "ㄆㄧㄢ",
        ["p'in"] = "ㄆㄧㄣ", ["p'ing"] = "ㄆㄧㄥ", ["p'o"] = "ㄆㄛ",
        ["p'ou"] = "ㄆㄡ", ["p'u"] = "ㄆㄨ", ["sa"] = "ㄙㄚ",
        ["sai"] = "ㄙㄞ", ["san"] = "ㄙㄢ", ["sang"] = "ㄙㄤ",
        ["sao"] = "ㄙㄠ", ["se"] = "ㄙㄜ", ["sei"] = "ㄙㄟ",
        ["sen"] = "ㄙㄣ", ["seng"] = "ㄙㄥ", ["sha"] = "ㄕㄚ",
        ["shai"] = "ㄕㄞ", ["shan"] = "ㄕㄢ", ["shang"] = "ㄕㄤ",
        ["shao"] = "ㄕㄠ", ["she"] = "ㄕㄜ", ["shei"] = "ㄕㄟ",
        ["shen"] = "ㄕㄣ", ["sheng"] = "ㄕㄥ", ["shih"] = "ㄕ",
        ["shou"] = "ㄕㄡ", ["shu"] = "ㄕㄨ", ["shua"] = "ㄕㄨㄚ",
        ["shuai"] = "ㄕㄨㄞ", ["shuan"] = "ㄕㄨㄢ", ["shuang"] = "ㄕㄨㄤ",
        ["shui"] = "ㄕㄨㄟ", ["shun"] = "ㄕㄨㄣ", ["shung"] = "ㄕㄨㄥ",
        ["shuo"] = "ㄕㄨㄛ", ["so"] = "ㄙㄨㄛ", ["sou"] = "ㄙㄡ",
        ["ssu"] = "ㄙ", ["su"] = "ㄙㄨ", ["suan"] = "ㄙㄨㄢ",
        ["sui"] = "ㄙㄨㄟ", ["sun"] = "ㄙㄨㄣ", ["sung"] = "ㄙㄨㄥ",
        ["ta"] = "ㄉㄚ", ["tai"] = "ㄉㄞ", ["tan"] = "ㄉㄢ",
        ["tang"] = "ㄉㄤ", ["tao"] = "ㄉㄠ", ["te"] = "ㄉㄜ",
        ["tei"] = "ㄉㄟ", ["ten"] = "ㄉㄣ", ["teng"] = "ㄉㄥ",
        ["ti"] = "ㄉㄧ", ["tiang"] = "ㄉㄧㄤ", ["tiao"] = "ㄉㄧㄠ",
        ["tieh"] = "ㄉㄧㄝ", ["tien"] = "ㄉㄧㄢ", ["ting"] = "ㄉㄧㄥ",
        ["tiu"] = "ㄉㄧㄡ", ["to"] = "ㄉㄨㄛ", ["tou"] = "ㄉㄡ",
        ["tsa"] = "ㄗㄚ", ["tsai"] = "ㄗㄞ", ["tsan"] = "ㄗㄢ",
        ["tsang"] = "ㄗㄤ", ["tsao"] = "ㄗㄠ", ["tse"] = "ㄗㄜ",
        ["tsei"] = "ㄗㄟ", ["tsen"] = "ㄗㄣ", ["tseng"] = "ㄗㄥ",
        ["tso"] = "ㄗㄨㄛ", ["tsou"] = "ㄗㄡ", ["tsu"] = "ㄗㄨ",
        ["tsuan"] = "ㄗㄨㄢ", ["tsui"] = "ㄗㄨㄟ", ["tsun"] = "ㄗㄨㄣ",
        ["tsung"] = "ㄗㄨㄥ", ["ts'a"] = "ㄘㄚ", ["ts'ai"] = "ㄘㄞ",
        ["ts'an"] = "ㄘㄢ", ["ts'ang"] = "ㄘㄤ", ["ts'ao"] = "ㄘㄠ",
        ["ts'e"] = "ㄘㄜ", ["ts'en"] = "ㄘㄣ", ["ts'eng"] = "ㄘㄥ",
        ["ts'o"] = "ㄘㄨㄛ", ["ts'ou"] = "ㄘㄡ", ["ts'u"] = "ㄘㄨ",
        ["ts'uan"] = "ㄘㄨㄢ", ["ts'ui"] = "ㄘㄨㄟ", ["ts'un"] = "ㄘㄨㄣ",
        ["ts'ung"] = "ㄘㄨㄥ", ["tu"] = "ㄉㄨ", ["tuan"] = "ㄉㄨㄢ",
        ["tui"] = "ㄉㄨㄟ", ["tun"] = "ㄉㄨㄣ", ["tung"] = "ㄉㄨㄥ",
        ["tzu"] = "ㄗ", ["tz'u"] = "ㄘ", ["t'a"] = "ㄊㄚ",
        ["t'ai"] = "ㄊㄞ", ["t'an"] = "ㄊㄢ", ["t'ang"] = "ㄊㄤ",
        ["t'ao"] = "ㄊㄠ", ["t'e"] = "ㄊㄜ", ["t'eng"] = "ㄊㄥ",
        ["t'i"] = "ㄊㄧ", ["t'iao"] = "ㄊㄧㄠ", ["t'ieh"] = "ㄊㄧㄝ",
        ["t'ien"] = "ㄊㄧㄢ", ["t'ing"] = "ㄊㄧㄥ", ["t'o"] = "ㄊㄨㄛ",
        ["t'ou"] = "ㄊㄡ", ["t'u"] = "ㄊㄨ", ["t'uan"] = "ㄊㄨㄢ",
        ["t'ui"] = "ㄊㄨㄟ", ["t'un"] = "ㄊㄨㄣ", ["t'ung"] = "ㄊㄨㄥ",
        ["wa"] = "ㄨㄚ", ["wai"] = "ㄨㄞ", ["wan"] = "ㄨㄢ",
        ["wang"] = "ㄨㄤ", ["wei"] = "ㄨㄟ", ["wen"] = "ㄨㄣ",
        ["weng"] = "ㄨㄥ", ["wo"] = "ㄨㄛ", ["wu"] = "ㄨ",
        ["ya"] = "ㄧㄚ", ["yan"] = "ㄧㄢ", ["yang"] = "ㄧㄤ",
        ["yao"] = "ㄧㄠ", ["yeh"] = "ㄧㄝ", ["yin"] = "ㄧㄣ",
        ["ying"] = "ㄧㄥ", ["yu"] = "ㄧㄡ", ["yung"] = "ㄩㄥ",
        ["yv"] = "ㄩ", ["yvan"] = "ㄩㄢ", ["yveh"] = "ㄩㄝ",
        ["yvn"] = "ㄩㄣ"
      };

    // MARK: - Maps for Keyboard-to-Phonabet parsers

    /// <summary>
    /// 標準大千排列專用處理陣列。<br /><br />
    /// 唯音輸入法 macOS 版使用了 Ukelele
    /// 佈局來完成對諸如倚天傳統等其它注音鍵盤排列的支援。
    /// 如果要將鐵恨模組拿給別的平台的輸入法使用的話，恐怕需要針對這些注音鍵盤排列各自新增專用陣列才可以。
    /// </summary>
    public static readonly Dictionary<string, string> MapQwertyDachen =
      new Dictionary<string,
        string> {
        ["0"] = "ㄢ", ["1"] = "ㄅ", ["2"] = "ㄉ",
        ["3"] = "ˇ", ["4"] = "ˋ", ["5"] = "ㄓ",
        ["6"] = "ˊ", ["7"] = "˙", ["8"] = "ㄚ",
        ["9"] = "ㄞ", ["-"] = "ㄦ", [","] = "ㄝ",
        ["."] = "ㄡ", ["/"] = "ㄥ", [";"] = "ㄤ",
        ["a"] = "ㄇ", ["b"] = "ㄖ", ["c"] = "ㄏ",
        ["d"] = "ㄎ", ["e"] = "ㄍ", ["f"] = "ㄑ",
        ["g"] = "ㄕ", ["h"] = "ㄘ", ["i"] = "ㄛ",
        ["j"] = "ㄨ", ["k"] = "ㄜ", ["l"] = "ㄠ",
        ["m"] = "ㄩ", ["n"] = "ㄙ", ["o"] = "ㄟ",
        ["p"] = "ㄣ", ["q"] = "ㄆ", ["r"] = "ㄐ",
        ["s"] = "ㄋ", ["t"] = "ㄔ", ["u"] = "ㄧ",
        ["v"] = "ㄒ", ["w"] = "ㄊ", ["x"] = "ㄌ",
        ["y"] = "ㄗ", ["z"] = "ㄈ", [" "] = " "
      };

    /// <summary>
    /// 酷音大千二十六鍵排列專用處理陣列，但未包含全部的處理內容。<br /><br />
    /// 在這裡將二十六個字母寫全，也只是為了方便做 validity check。<br />
    /// 這裡提前對複音按鍵做處理，然後再用程式判斷介母類型、據此判斷是否需要做複音切換。
    /// </summary>
    public static readonly Dictionary<string, string> MapDachenCp26StaticKeys =
      new Dictionary<string, string> {
        ["a"] = "ㄇ", ["b"] = "ㄖ",
        ["c"] = "ㄏ", ["d"] = "ㄎ",
        ["e"] = "ㄍ", ["f"] = "ㄑ",
        ["g"] = "ㄕ", ["h"] = "ㄘ",
        ["i"] = "ㄞ", ["j"] = "ㄨ",
        ["k"] = "ㄜ", ["l"] = "ㄤ",
        ["m"] = "ㄩ", ["n"] = "ㄙ",
        ["o"] = "ㄢ", ["p"] = "ㄦ",
        ["q"] = "ㄅ", ["r"] = "ㄐ",
        ["s"] = "ㄋ", ["t"] = "ㄓ",
        ["u"] = "ㄧ", ["v"] = "ㄒ",
        ["w"] = "ㄉ", ["x"] = "ㄌ",
        ["y"] = "ㄗ", ["z"] = "ㄈ",
        [" "] = " "
      };

    /// <summary>
    /// 許氏排列專用處理陣列，但未包含全部的映射內容。<br /><br />
    /// 在這裡將二十六個字母寫全，也只是為了方便做 validity check。<br />
    /// 這裡提前對複音按鍵做處理，然後再用程式判斷介母類型、據此判斷是否需要做複音切換。
    /// </summary>
    public static readonly Dictionary<string, string> MapHsuStaticKeys =
      new Dictionary<string, string> {
        ["a"] = "ㄘ", ["b"] = "ㄅ", ["c"] = "ㄕ",
        ["d"] = "ㄉ", ["e"] = "ㄧ", ["f"] = "ㄈ",
        ["g"] = "ㄍ", ["h"] = "ㄏ", ["i"] = "ㄞ",
        ["j"] = "ㄐ", ["k"] = "ㄎ", ["l"] = "ㄌ",
        ["m"] = "ㄇ", ["n"] = "ㄋ", ["o"] = "ㄡ",
        ["p"] = "ㄆ", ["r"] = "ㄖ", ["s"] = "ㄙ",
        ["t"] = "ㄊ", ["u"] = "ㄩ", ["v"] = "ㄔ",
        ["w"] = "ㄠ", ["x"] = "ㄨ", ["y"] = "ㄚ",
        ["z"] = "ㄗ", [" "] = " "
      };

    /// <summary>
    /// 倚天忘形排列預處理專用陣列，但未包含全部的映射內容。<br /><br />
    /// 在這裡將二十六個字母寫全，也只是為了方便做 validity check。<br />
    /// 這裡提前對複音按鍵做處理，然後再用程式判斷介母類型、據此判斷是否需要做複音切換。
    /// </summary>
    public static readonly Dictionary<string, string> MapETen26StaticKeys =
      new Dictionary<string, string> {
        ["a"] = "ㄚ", ["b"] = "ㄅ",
        ["c"] = "ㄕ", ["d"] = "ㄉ",
        ["e"] = "ㄧ", ["f"] = "ㄈ",
        ["g"] = "ㄓ", ["h"] = "ㄏ",
        ["i"] = "ㄞ", ["j"] = "ㄖ",
        ["k"] = "ㄎ", ["l"] = "ㄌ",
        ["m"] = "ㄇ", ["n"] = "ㄋ",
        ["o"] = "ㄛ", ["p"] = "ㄆ",
        ["q"] = "ㄗ", ["r"] = "ㄜ",
        ["s"] = "ㄙ", ["t"] = "ㄊ",
        ["u"] = "ㄩ", ["v"] = "ㄍ",
        ["w"] = "ㄘ", ["x"] = "ㄨ",
        ["y"] = "ㄔ", ["z"] = "ㄠ",
        [" "] = " "
      };

    /// <summary>
    /// 星光排列排列預處理專用陣列，但未包含全部的映射內容。<br /><br />
    /// 在這裡將二十六個字母寫全，也只是為了方便做 validity check。<br />
    /// 這裡提前對複音按鍵做處理，然後再用程式判斷介母類型、據此判斷是否需要做複音切換。
    /// </summary>
    public static readonly Dictionary<string, string> MapStarlightStaticKeys =
      new Dictionary<string, string> {
        ["a"] = "ㄚ", ["b"] = "ㄅ", ["c"] = "ㄘ",
        ["d"] = "ㄉ", ["e"] = "ㄜ", ["f"] = "ㄈ",
        ["g"] = "ㄍ", ["h"] = "ㄏ", ["i"] = "ㄧ",
        ["j"] = "ㄓ", ["k"] = "ㄎ", ["l"] = "ㄌ",
        ["m"] = "ㄇ", ["n"] = "ㄋ", ["o"] = "ㄛ",
        ["p"] = "ㄆ", ["q"] = "ㄔ", ["r"] = "ㄖ",
        ["s"] = "ㄙ", ["t"] = "ㄊ", ["u"] = "ㄨ",
        ["v"] = "ㄩ", ["w"] = "ㄡ", ["x"] = "ㄕ",
        ["y"] = "ㄞ", ["z"] = "ㄗ", ["1"] = " ",
        ["2"] = "ˊ", ["3"] = "ˇ", ["4"] = "ˋ",
        ["5"] = "˙", ["6"] = " ", ["7"] = "ˊ",
        ["8"] = "ˇ", ["9"] = "ˋ", ["0"] = "˙",
        [" "] = " "
      };

    /// <summary>
    /// 劉氏擬音注音排列預處理專用陣列，但未包含全部的映射內容。<br /><br />
    /// 在這裡將二十六個字母寫全，也只是為了方便做 validity check。<br />
    /// 這裡提前對複音按鍵做處理，然後再用程式判斷介母類型、據此判斷是否需要做複音切換。
    /// </summary>
    public static readonly Dictionary<string, string> MapAlvinLiuStaticKeys =
      new Dictionary<string, string> {
        ["q"] = "ㄑ", ["w"] = "ㄠ",
        ["e"] = "ㄜ", ["r"] = "ㄖ",
        ["t"] = "ㄊ", ["y"] = "ㄩ",
        ["u"] = "ㄨ", ["i"] = "ㄧ",
        ["o"] = "ㄛ", ["p"] = "ㄆ",
        ["a"] = "ㄚ", ["s"] = "ㄙ",
        ["d"] = "ㄉ", ["f"] = "ㄈ",
        ["g"] = "ㄍ", ["h"] = "ㄏ",
        ["j"] = "ㄐ", ["k"] = "ㄎ",
        ["l"] = "ㄦ", ["z"] = "ㄗ",
        ["x"] = "ㄒ", ["c"] = "ㄘ",
        ["v"] = "ㄡ", ["b"] = "ㄅ",
        ["n"] = "ㄋ", ["m"] = "ㄇ",
        [" "] = " "
      };

    /// <summary>
    /// 倚天傳統排列專用處理陣列。
    /// </summary>
    public static readonly Dictionary<string, string> MapQwertyETenTraditional =
      new Dictionary<string,
        string> {
        ["'"] = "ㄘ", [","] = "ㄓ", ["-"] = "ㄥ",
        ["."] = "ㄔ", ["/"] = "ㄕ", ["0"] = "ㄤ",
        ["1"] = "˙", ["2"] = "ˊ", ["3"] = "ˇ",
        ["4"] = "ˋ", ["7"] = "ㄑ", ["8"] = "ㄢ",
        ["9"] = "ㄣ", [";"] = "ㄗ", ["="] = "ㄦ",
        ["a"] = "ㄚ", ["b"] = "ㄅ", ["c"] = "ㄒ",
        ["d"] = "ㄉ", ["e"] = "ㄧ", ["f"] = "ㄈ",
        ["g"] = "ㄐ", ["h"] = "ㄏ", ["i"] = "ㄞ",
        ["j"] = "ㄖ", ["k"] = "ㄎ", ["l"] = "ㄌ",
        ["m"] = "ㄇ", ["n"] = "ㄋ", ["o"] = "ㄛ",
        ["p"] = "ㄆ", ["q"] = "ㄟ", ["r"] = "ㄜ",
        ["s"] = "ㄙ", ["t"] = "ㄊ", ["u"] = "ㄩ",
        ["v"] = "ㄍ", ["w"] = "ㄝ", ["x"] = "ㄨ",
        ["y"] = "ㄡ", ["z"] = "ㄠ", [" "] = " "
      };

    /// <summary>
    /// IBM排列專用處理陣列。
    /// </summary>
    public static readonly Dictionary<string, string> MapQwertyIBM =
      new Dictionary<string,
        string> {
        [","] = "ˇ", ["-"] = "ㄏ", ["."] = "ˋ",
        ["/"] = "˙", ["0"] = "ㄎ", ["1"] = "ㄅ",
        ["2"] = "ㄆ", ["3"] = "ㄇ", ["4"] = "ㄈ",
        ["5"] = "ㄉ", ["6"] = "ㄊ", ["7"] = "ㄋ",
        ["8"] = "ㄌ", ["9"] = "ㄍ", [";"] = "ㄠ",
        ["a"] = "ㄧ", ["b"] = "ㄥ", ["c"] = "ㄣ",
        ["d"] = "ㄩ", ["e"] = "ㄒ", ["f"] = "ㄚ",
        ["g"] = "ㄛ", ["h"] = "ㄜ", ["i"] = "ㄗ",
        ["j"] = "ㄝ", ["k"] = "ㄞ", ["l"] = "ㄟ",
        ["m"] = "ˊ", ["n"] = "ㄦ", ["o"] = "ㄘ",
        ["p"] = "ㄙ", ["q"] = "ㄐ", ["r"] = "ㄓ",
        ["s"] = "ㄨ", ["t"] = "ㄔ", ["u"] = "ㄖ",
        ["v"] = "ㄤ", ["w"] = "ㄑ", ["x"] = "ㄢ",
        ["y"] = "ㄕ", ["z"] = "ㄡ", [" "] = " "
      };

    /// <summary>
    /// 精業排列專用處理陣列。
    /// </summary>
    public static readonly Dictionary<string, string> MapSeigyou = new Dictionary<
                                                                     string, string> {
      ["a"] = "ˇ", ["b"] = "ㄒ", ["c"] = "ㄌ",
      ["d"] = "ㄋ",
      ["e"] = "ㄊ", ["f"] = "ㄎ", ["g"] = "ㄑ",
      ["h"] = "ㄕ",
      ["i"] = "ㄛ", ["j"] = "ㄘ", ["k"] = "ㄜ",
      ["l"] = "ㄠ",
      ["m"] = "ㄙ", ["n"] = "ㄖ", ["o"] = "ㄟ",
      ["p"] = "ㄣ",
      ["q"] = "ˊ", ["r"] = "ㄍ", ["s"] = "ㄇ",
      ["t"] = "ㄐ",
      ["u"] = "ㄗ", ["v"] = "ㄏ", ["w"] = "ㄆ",
      ["x"] = "ㄈ",
      ["y"] = "ㄔ", ["z"] = "ˋ", ["1"] = "˙",
      ["2"] = "ㄅ",
      ["3"] = "ㄉ", ["6"] = "ㄓ", ["8"] = "ㄚ",
      ["9"] = "ㄞ",
      ["0"] = "ㄢ", ["-"] = "ㄧ", [";"] = "ㄤ",
      [","] = "ㄝ",
      ["."] = "ㄡ", ["/"] = "ㄥ", ["'"] = "ㄩ",
      ["["] = "ㄨ",
      ["="] = "ㄦ", [" "] = " "
    };

    /// <summary>
    /// 偽精業排列專用處理陣列。
    /// </summary>
    public static readonly Dictionary<string, string> MapFakeSeigyou =
      new Dictionary<string,
        string> {
        ["a"] = "ˇ", ["b"] = "ㄒ", ["c"] = "ㄌ",
        ["d"] = "ㄋ", ["e"] = "ㄊ", ["f"] = "ㄎ",
        ["g"] = "ㄑ", ["h"] = "ㄕ", ["i"] = "ㄛ",
        ["j"] = "ㄘ", ["k"] = "ㄜ", ["l"] = "ㄠ",
        ["m"] = "ㄙ", ["n"] = "ㄖ", ["o"] = "ㄟ",
        ["p"] = "ㄣ", ["q"] = "ˊ", ["r"] = "ㄍ",
        ["s"] = "ㄇ", ["t"] = "ㄐ", ["u"] = "ㄗ",
        ["v"] = "ㄏ", ["w"] = "ㄆ", ["x"] = "ㄈ",
        ["y"] = "ㄔ", ["z"] = "ˋ", ["1"] = "˙",
        ["2"] = "ㄅ", ["3"] = "ㄉ", ["6"] = "ㄓ",
        ["8"] = "ㄚ", ["9"] = "ㄞ", ["0"] = "ㄢ",
        ["4"] = "ㄧ", [";"] = "ㄤ", [","] = "ㄝ",
        ["."] = "ㄡ", ["/"] = "ㄥ", ["7"] = "ㄩ",
        ["5"] = "ㄨ", ["-"] = "ㄦ", [" "] = " "
      };

    /// <summary>
    /// 神通排列專用處理陣列。
    /// </summary>
    public static readonly Dictionary<string, string> MapQwertyMiTAC =
      new Dictionary<string,
        string> {
        [","] = "ㄓ", ["-"] = "ㄦ", ["."] = "ㄔ",
        ["/"] = "ㄕ", ["0"] = "ㄥ", ["1"] = "˙",
        ["2"] = "ˊ", ["3"] = "ˇ", ["4"] = "ˋ",
        ["5"] = "ㄞ", ["6"] = "ㄠ", ["7"] = "ㄢ",
        ["8"] = "ㄣ", ["9"] = "ㄤ", [";"] = "ㄝ",
        ["a"] = "ㄚ", ["b"] = "ㄅ", ["c"] = "ㄘ",
        ["d"] = "ㄉ", ["e"] = "ㄜ", ["f"] = "ㄈ",
        ["g"] = "ㄍ", ["h"] = "ㄏ", ["i"] = "ㄟ",
        ["j"] = "ㄐ", ["k"] = "ㄎ", ["l"] = "ㄌ",
        ["m"] = "ㄇ", ["n"] = "ㄋ", ["o"] = "ㄛ",
        ["p"] = "ㄆ", ["q"] = "ㄑ", ["r"] = "ㄖ",
        ["s"] = "ㄙ", ["t"] = "ㄊ", ["u"] = "ㄡ",
        ["v"] = "ㄩ", ["w"] = "ㄨ", ["x"] = "ㄒ",
        ["y"] = "ㄧ", ["z"] = "ㄗ", [" "] = " "
      };

    /// <summary>
    /// 用以判定「是否是拼音鍵盤佈局」的集合。
    /// </summary>
    public static readonly MandarinParser[] ArrPinyinParsers = {
                                                                 MandarinParser.OfHanyuPinyin,
                                                                 MandarinParser.OfSecondaryPinyin,
                                                                 MandarinParser.OfYalePinyin,
                                                                 MandarinParser.OfHualuoPinyin,
                                                                 MandarinParser.OfUniversalPinyin,
                                                                 MandarinParser.OfWadeGilesPinyin
                                                               };

    private static HashSet<Rune> BuildRuneSet(string source) {
      HashSet<Rune> result = new HashSet<Rune>();
      foreach (Rune rune in source.EnumerateRunes()) result.Add(rune);
      return result;
    }
  }

  internal static class StringExtensions {
    /// <summary>
    /// 檢查某個字串是否包含其他的合規字串。
    /// </summary>
    /// <param name="self">該字串自身。</param>
    /// <param name="value">檢查是否要被包含的字串。</param>
    /// <returns>如果要檢查的被包含的物件是 null 或空字串的話，這個函式不會扔
    /// Exception，而是會返回說「主體是不是空的或是不是 null」。</returns>
    public static bool DoesHave(this string self, string value) {
      return (string.IsNullOrEmpty(value))
        ? string.IsNullOrEmpty(self)
        : self.Contains(value);
    }
  }
}
